Cod sursa(job #2359732)
| Utilizator | Data | 1 martie 2019 08:58:51 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.55 kb |
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
char a[1000001];int q[1000001];
int n,Q,l;
void INIQ()
{
q[1]=0;int j=0;
for(int i=2;i<=n;++i)
{
while(a[j+1]!=a[i]&&j>0)j=q[j];
if(a[j+1]==a[i])++j;
q[i]=j;
}
}
int main()
{
for(f>>Q;Q>0;--Q)
{
f>>(a+1);a[0]=' ';n=strlen(a)+1;
INIQ();
for(l=n;l>0;--l)if(q[l]>=(l+1)/2){while(l%(l-q[l])!=0)--l;break;}
g<<l<<'\n';
}
}
