Cod sursa(job #1301681)
| Utilizator | Data | 26 decembrie 2014 12:20:10 | |
|---|---|---|---|
| Problema | Prefix | Scor | 90 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.67 kb |
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int N = 1000010;
ifstream F("prefix.in");
ofstream G("prefix.out");
int t,n,pi[N];
char a[N];
int solve(char a[],int n)
{
int p = 0,ans = 0;
for (int i=2;i<=n;++i)
{
while ( p>0 && a[i] != a[p+1] )
p = pi[p];
if ( a[i] == a[p+1] )
p++;
pi[i] = p;
if ( i % (i-p) == 0 )
if ( p > 0 )
ans = i;
}
return ans;
}
int main()
{
F>>t, F.get();
while ( t-- )
{
F.getline(a+1,N);
n = strlen(a+1);
G<<solve(a,n)<<'\n';
}
}
