第三章:UVa455 解題報告
阿新 • • 發佈:2019-01-29
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;
}