1. 程式人生 > >第三章:UVa455 解題報告

第三章:UVa455 解題報告

UVa455 解題報告

這是一個數週期串的問題,可以列舉週期,這樣方便一些,列舉週期之後進行字元檢查,看看其餘字元是否符合週期規律,找到之後輸出當前週期後立刻跳出。按照題目大意,週期可以為字串的自身長度。 注意,此題卡格式,最後一行沒有空行,此外,答案要先記錄下來,列印的時候每個答案後面空一行。
以下是程式碼(可直接AC):

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::string;

int main()
{
    string s;
    int
len,m[100]; int T,result[10000],top=0; cin>>T; while(T--) { cin>>s; int k=0,res=1; len=s.length(); for(int i=1;i<len;i++) if(len%i==0)//檢查i是否可以作為週期 { int ok=1;//設定標誌 for(int j=i;j<len;j++) if
(s[j]!=s[j%i])//如果有一個字元不同,立刻跳出 { ok=0; break; } if(ok)//找到的第一個可行解就列印並跳出,這樣週期是最小的 { res=0; result[top++]=i; break; } } if
(res)//如果找不到,則以自身為週期 result[top++]=len; } for(int i=0;i<top;i++) { cout<<result[i]<<"\n"; if(i!=top-1) cout<<"\n";//最後一行不空 } return 0; }