Cod sursa(job #3243995)
| Utilizator | Data | 22 septembrie 2024 20:19:05 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.67 kb |
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int t,i,n;
char c[1000005];
int kmp(char c[])
{
int n=strlen(c),i,j,pi[1000005],sol=0;
pi[0]=0;
for ( i = 1; i <n; i++)
{
j = pi[i-1];
while (j > 0 && c[i] != c[j])
j = pi[j-1];
if (c[i] == c[j])
j++;
pi[i] = j;
if((i+1)%(i+1-pi[i])==0&&(i+1)/(i+1-pi[i])>1)
sol=i+1;
}
return sol;
}
int main()
{
f>>t;
for(i=1;i<=t;i++)
{
f>>c;
g<<kmp(c)<<'\n';
}
return 0;
}