Mai intai trebuie sa te autentifici.
Cod sursa(job #1314036)
Utilizator | Data | 11 ianuarie 2015 14:31:18 | |
---|---|---|---|
Problema | Prefix | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.68 kb |
#include <cstdio>
#include <cstring>
#define max_dim 1000002
using namespace std;
char s[max_dim];
int nxt[max_dim];
int main()
{
int n;
freopen("prefix.in", "rt", stdin);
freopen("prefix.out", "wt", stdout);
scanf("%d\n", &n);
while(n--)
{
gets(s+1);
int answer=0, k;
nxt[1]=k=0;
for(int i=2; s[i]; ++i)
{
while(k && s[i]!=s[k+1])
k=nxt[k];
if(s[i]==s[k+1]) ++k;
nxt[i]=k;
}
for(int i=strlen(s); i>0; ++i)
if(nxt[i] && i%(i-nxt[i])==0) {answer=i; break;}
printf("%d\n", answer);
}
return 0;
}