UVA - 455(周期串)
阿新 • • 發佈:2018-01-28
names style log %d 思路 int 技巧 clas ios
求一段長度為k的字符串的最小重復周期(k<=80),代碼:
思路:
周期串長度n必然能被k整除,在這一條件下,對周期小於k/2的,進行驗證,驗證k/n-1次,取最先成功的重復周期長度或k為最終結果
小技巧:
如果題目要求“兩結果之間”有換行,那麽對於最後一個case,可利用以下代碼高亮處的方式來處理,使代碼更簡潔美觀巧妙。
#include"iostream" #include"cctype" #include"cstring" using namespace std; #define maxn 85 //#define local int judge(char *s,int k,int len) {int n=len/k; //倍數/比較幾次 for(int j=1;j<n;j++) for(int i=0;i<k;i++) if(s[i]!=s[i+j*k]) return 0; return 1; } int main() { #ifdef local freopen("UVa_in.txt","r",stdin); // freopen("UVa_out.txt","w",stdout); #endif char s[maxn]; intcont,len; scanf("%d",&cont); while(cont--){ scanf("%s",s); len=strlen(s); int mark=1; for(int i=1;i<=len/2;i++){ //被比較串的結尾com,由0->len-1 if(len%i==0) if(judge(s,i,len)) { cout<<i<<endl; mark=0; break; } } if(mark==1) cout<<len<<endl; if(cont)cout<<endl; } return 0; }
UVA - 455(周期串)