Cod sursa(job #1094848)
| Utilizator | Data | 29 ianuarie 2014 22:02:16 | |
|---|---|---|---|
| Problema | Prefix | Scor | 90 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.68 kb |
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
char s[1000002];
int pi[1000002],fr[1000002];
int n,maxv,k,t;
int main()
{
fin>>t;
for (;t; --t)
{
fin>>(s+1);
n = strlen(s+1);
pi[1] = 0;
fr[1] = 1;
k = 0;
maxv = 0;
for (int i=2; i<=n; ++i)
{
while (s[i]!=s[k+1] && k != 0)
k = pi[k];
if (s[i]==s[k+1])
++k;
pi[i] = k;
if (k!=0 && i % (i-k) == 0)
maxv = i;
}
fout<<maxv<<"\n";
}
}
