Cod sursa(job #476512)
Utilizator | Data | 11 august 2010 12:52:01 | |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.62 kb |
#include<cstdio>
#include<cstring>
using namespace std;
const char iname[]="prefix.in";
const char oname[]="prefix.out";
const int maxn=1000005;
char s[maxn];
int pi[maxn],t,i,rez,k;
int main()
{
freopen(iname,"r",stdin);
freopen(oname,"w",stdout);
scanf("%d\n",&t);
while(t--)
{
fgets(s+1,sizeof(s),stdin);
k=0;rez=0;
for(i=2;s[i]&&s[i]!='\n';++i)
{
while(k&&s[k+1]!=s[i])
k=pi[k];
if(s[k+1]==s[i])
++k;
pi[i]=k;
if(k&&i%(i-k)==0)
rez=i;
}
printf("%d\n",rez);
}
}