#14701: _TLE


cc85nod@gmail.com (張智諺)

學校 : 國立中央大學
編號 : 69924
來源 : [140.113.216.183]
最後登入時間 :
2022-07-05 10:54:49

#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)

學校 : 南投縣立旭光高級中學
編號 : 68108
來源 : [114.42.176.221]
最後登入時間 :
2025-10-04 22:52:03

您會不會又貼出參考解。



#14704: Re:TLE


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

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12

您會不會又貼出參考解。




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

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

 

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

#14705: Re:TLE


asnewchien@gmail.com (david)

學校 : 南投縣立旭光高級中學
編號 : 68108
來源 : [114.42.176.221]
最後登入時間 :
2025-10-04 22:52:03

8個字,遞迴應該會過。

google 一下 permutation

 



#14706: Re:TLE


cc85nod@gmail.com (張智諺)

學校 : 國立中央大學
編號 : 69924
來源 : [140.113.216.183]
最後登入時間 :
2022-07-05 10:54:49

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