Pagini recente » Cod sursa (job #253135) | Cod sursa (job #1389411) | Cod sursa (job #1811144) | Cod sursa (job #555155) | Cod sursa (job #2724315)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
string text;
int T;
int lps[1000001];
int n;
bool isperiod(int x){
if((lps[x-1] >= x/2) && (x%(x-lps[x-1])== 0)){
return 1;
}
return 0;
}
void compute_lps_array(){
int len = 0;
lps[len] = 0;
int i = 1;
int ans = 0;
while(i < n){
if(text[i] == text[len]){
++len;
lps[i] = len;
if(isperiod(i+1)){
ans = i+1;
}
++i;
}
else{
if(len != 0){
len = lps[len-1];
}
else{
lps[i] = 0;
++i;
}
}
}
g<<ans;
}
int main()
{
f>>T;
for(int t=1;t<=T;++t){
f>>text;
n = text.length();
compute_lps_array();
g<<"\n";
}
return 0;
}