Pagini recente » Cod sursa (job #2525721) | Cod sursa (job #2883220) | Cod sursa (job #14834) | Cod sursa (job #1059065) | Cod sursa (job #564236)
Cod sursa(job #564236)
Utilizator |
Smeu Rares Sm3U |
Data |
26 martie 2011 22:50:00 |
Problema |
Prefix |
Scor |
100 |
Compilator |
cpp |
Status |
done |
Runda |
gr_3 |
Marime |
0.69 kb |
#include <stdio.h>
#include <string.h>
using namespace std;
char a[1000100];
int b[1000100];
void citire()
{
gets(a);
int max=0;
int nr=1;
int n=strlen(a);
int i=0;
int j=-1;
b[i]=j;
while(i<n)
{
while(j>=0 && a[i]!=a[j])
j=b[j];
i++;
j++;
b[i]=j;
if(j>max && i-j<=j)
max=j,nr=i-j;
}
if((max/nr+1)*nr==1)
printf("0\n");
else
printf("%d\n",(max/nr+1)*nr);
}
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
int t;
scanf("%d\n",&t);
while(t)
t--,citire();
return 0;
}