Pagini recente » Borderou de evaluare (job #2841036) | Cod sursa (job #1348145) | Cod sursa (job #1452645) | Cod sursa (job #2673552) | Cod sursa (job #3163574)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
#define nmax 1000000
int pi[nmax];
vector <int> v;
int main() {
string s;
ifstream cin("prefix.in");
ofstream cout("prefix.out");
int i, k, tst, n, m, x, rez, ok;
cin >> m;
for( tst = 0; tst < m; tst++ ) {
cin >> s;
rez = 0;
ok = 0;
k = 0;
n = s.size();
for( i = 1; i < n; i++ ) {
while( k != 0 && s[k] != s[i] )
k = pi[k-1];
if( s[k] == s[i] )
k++;
pi[i] = k;
x = i+1 - pi[i];
if( (i+1)%x == 0 && pi[i] != 0 )
rez = i+1;
}
cout << rez << "\n";
s.clear();
}
return 0;
}