Cod sursa(job #2434242)
| Utilizator | Data | 1 iulie 2019 12:28:12 | |
|---|---|---|---|
| Problema | Prefix | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.67 kb |
#include<fstream>
#include<string>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
char s[1000001];
long k,urm[1000001],i,rez,t;
int main()
{
int n;
in >> n;
in.getline(s,1000000);
for(int j = 1; j <= n; ++j)
{
in.getline(s + 1, 1000001);
k = 0;
rez = 0;
t = strlen(s + 1);
urm[1] = 0;
for(int i = 2 ; i <= t; ++i)
{
while( k > 0 && s[i] != s[k+1]) k = urm[k];
if(s[i] == s[k+1]) k++;
urm[i] = k;
if(k > 0 && (i % (i - k) == 0)) rez = i;
}
out << rez << '\n';
}
return 0;
}
