Pagini recente » Cod sursa (job #1982957) | Cod sursa (job #665254) | Cod sursa (job #108132) | Cod sursa (job #1871155) | Cod sursa (job #1316732)
#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(per && i%per==0 && i>per && (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;
}