#14701: TLE


cc85nod@gmail.com (張智諺)

學校 : 國立中央大學
編號 : 69924
來源 : [140.113.216.183]
最後登入時間 :
2022-07-05 10:54:49
a524. 手機之謎 | From: [140.115.184.190] | 發表日期 : 2018-07-31 19:57

#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.180.252]
最後登入時間 :
2024-05-17 15:04:41
a524. 手機之謎 | From: [61.223.63.205] | 發表日期 : 2018-07-31 20:08

您會不會又貼出參考解。



 
#14704: Re:TLE


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

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12
a524. 手機之謎 | From: [49.158.83.43] | 發表日期 : 2018-07-31 20:17

您會不會又貼出參考解。




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

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

 

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

 
#14705: Re:TLE


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [114.42.180.252]
最後登入時間 :
2024-05-17 15:04:41
a524. 手機之謎 | From: [61.223.63.205] | 發表日期 : 2018-07-31 20:40

8個字,遞迴應該會過。

google 一下 permutation

 



 
#14706: Re:TLE


cc85nod@gmail.com (張智諺)

學校 : 國立中央大學
編號 : 69924
來源 : [140.113.216.183]
最後登入時間 :
2022-07-05 10:54:49
a524. 手機之謎 | From: [1.200.193.158] | 發表日期 : 2018-07-31 21:16

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

 
 
ZeroJudge Forum