Cod sursa(job #856462)
| Utilizator | Data | 16 ianuarie 2013 15:32:13 | |
|---|---|---|---|
| Problema | Prefix | Scor | 70 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.53 kb |
#include<fstream>
#include<string>
using namespace std;
string s;
int i,j,k,n,m,c[1000005];
int main()
{
ifstream f("prefix.in");
ofstream g("prefix.out");
f >> n;
for (k=1;k<=n;k++)
{
f >> s;
m=s.length()-1;
for (i=2;i<=m;i++)
{
j=c[i-1];
while ((s[i-1]!=s[j]) && (j>0))
j=c[j];
if (s[i-1]==s[j])
c[i]=j+1;
else c[i]=0;
}
for (i=m;i>=2;i--)
if ((i%(i-c[i])==0) && (c[i]!=0))
{
g << i << "\n";
break;
}
if (i==1)
g << 0 << "\n";
}
return 0;
}
