#14701: _TLE


cc85nod@gmail.com (張智諺)


#include <iostream>
#include <stdio.h>
using namespace std;

void func(char c, string s, char array[]);
int n;

int main() {

while(scanf("%d", &n)) {
char array[n + 1];
for(int i = 0; i < n + 1; i++) {
array[i] = '0' + i;
}
for(int i = n; i >= 1; i--) {
func(array[i], "", array);
}
}
return 0;
}
void func(char c, string s, char array[]) {

for(int i = 0; i < s.size(); i++) {
if(s[i] == c) return;
}
s += c;
if(s.size() == n) {
cout << s << "\n";
return;
}
for(int i = n; i >= 1; i--) {
func(array[i], s, array);
}
}

 

不好意思,我嘗試用每個都走過,只是太慢了。
請問有沒有什麼更好的作法呢?

 

 

#14703: Re:TLE


asnewchien@gmail.com (david)


您會不會又貼出參考解。



#14704: Re:TLE


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)


您會不會又貼出參考解。




不用擔心啦,他真的TLE XD。

樓主的話,可以考慮用內建的prev_permutation。

 

原程式碼會TLE,看起來是因為是遞迴+String的關係(目測是這樣啦,畢竟遞迴的時候還要把當前參數放進堆疊裡)。

#14705: Re:TLE


asnewchien@gmail.com (david)


8個字,遞迴應該會過。

google 一下 permutation

 



#14706: Re:TLE


cc85nod@gmail.com (張智諺)


謝謝兩位的回答,感激不盡!