Cod sursa(job #2453111)
| Utilizator | Data | 2 septembrie 2019 15:08:04 | |
|---|---|---|---|
| Problema | Prefix | Scor | 80 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.7 kb |
#include <fstream>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
int t,i,j,k,n,b[1000001],rez;
char c,a[1000001];
int main ()
{
in>>t;
in.get (c);
for (i=1;i<=t;++i)
{
in.get (c);
n=0;
while (c!='\n')
{
a[++n]=c;
b[n]=0;
in.get (c);
}
rez=0;
k=1;
for (j=2;j<=n;++j)
{
while (k!=1&&a[j]!=a[k]) k=b[k-1]+1;
if (a[j]==a[k])
{
b[j]=k;
k++;
}
}
for (j=n;j>=2;--j)
{
if (b[j]!=0&&j%(j-b[j])==0)
{
rez=j;
break;
}
}
out<<rez<<'\n';
}
return 0;
}
