Pagini recente » Cod sursa (job #1819827) | Cod sursa (job #1517907) | Cod sursa (job #739267) | Cod sursa (job #666071) | Cod sursa (job #1316734)
#include<fstream>
#include<string>
#define MAXN 1000001
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int PI[MAXN];
int PER[MAXN];
string SIR;
int compute(int size) {
PI[1] = 0;
PER[1] = 1;
PER[0] = 0;
int best = 0, per;
int it = 0;
for(int i=2; i<=size; ++i) {
while(it * (SIR[it] - SIR[i-1]))
it = PI[it];
if(SIR[it] == SIR[i-1]) {
it++;
}
PI[i] = it;
per = i - PI[i];
if(((i%per==0) * PI[i]) && (per % PER[i-per]) == 0) {
PER[i] = per;
best = i;
} else {
PER[i] = i;
}
}
return best;
}
int main() {
int T, i, per, size;
fin>>T;
while(T--) {
fin>>SIR;
size = SIR.size();
fout<<compute(size)<<'\n';
}
return 0;
}