Pagini recente » Cod sursa (job #1399895) | Cod sursa (job #2740077) | Cod sursa (job #2498154) | Cod sursa (job #2209270) | Cod sursa (job #2636078)
#include <bits/stdc++.h>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int Nmax = 1e6 + 5;
int pi[Nmax];
int T;
string S;
void make_prefix()
{
memset(pi,0,sizeof(pi));
int K = 0, ans = 0;
for(int i = 1; i < S.size(); ++i)
{
while(K > 0 && S[K] != S[i])
K = pi[K - 1];
if(S[K] == S[i])
K++;
pi[i] = K;
if(pi[i] && (i + 1) % (i + 1 - pi[i]) == 0)
ans = i + 1;
}
out << ans << '\n';
}
int main()
{
in >> T;
//out << '\n';
while(T--)
{
in >> S;
make_prefix();
/*for(int i = 0; i < S.size(); ++i)
out << setw(2) << i + 1 << " ";
out << '\n';
for(int i = 0; i < S.size(); ++i)
out << setw(2) << pi[i] <<" ";
out << "\n\n";*/
}
return 0;
}