Cod sursa(job #333844)
Utilizator | Popovici Mihai misuvd | Data | 24 iulie 2009 11:25:01 |
---|---|---|---|
Problema | Prefix | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.6 kb |
#include<string.h>
#include<fstream.h>
char a[10002];
int u[10002],n,i,m,max;
void prefix()
{ u[1]=0;
int k=0;
for(int q=2;q<=m;q++)
{
while(a[q]!=a[k+1]&&k>0)
k=u[k];
if(a[q]==a[k+1])
k++;
u[q]=k;
if(u[q]>0&&q%(q-k)==0&&q>max)
max=q;
}
}
int main()
{
ifstream f("prefix.in");
ofstream g("prefix.out");
f>>n;
for(i=1;i<=n;i++)
{
max=0;
f>>a[i];
m=strlen(a)-1;
for(int j=m;j>=0;j--)
a[j+1]=a[j];
a[0]=' ';
m++;
prefix();
if(m>1)
g<<max<<"\n";
else
g<<0<<"\n";
}
return 0;
}