Cod sursa(job #210226)
Utilizator | Cebere Bogdan Bogdan_C | Data | 26 septembrie 2008 22:04:56 |
---|---|---|---|
Problema | Prefix | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.43 kb |
#include<fstream>
#include<string>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
char s[10000];
long k,urm[10000],i,rez,t;
int main()
{int n;
in>>n;in.getline(s,1000);
for(int j=1;j<=n;++j)
{
in.getline(s+1,10000);
k=0;rez=0; t=strlen(s+1);urm[1]=0;urm[0]=0;
for(i=2;i<=t;++i)
{while(k>0 && s[i]!=s[k+1]) k=urm[k];
if(s[i]==s[k+1]) k++;
urm[i]=k;
if(k>0 && (i%(i-k)==0)) rez=i;}
out<<rez<<'\n';}
return 0;
}