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;
}