Pagini recente » Cod sursa (job #3247898) | Cod sursa (job #2176893) | Cod sursa (job #3274048) | Cod sursa (job #3282928) | Cod sursa (job #3293120)
#include <fstream>
#include <string>
#include <queue>
using namespace std;
ifstream cin("prefix.in");
ofstream cout("prefix.out");
int lps[2000001];
queue<int> q;
void LPS(string pattern)
{
int i=1;
int j=0;
int n=pattern.length();
while(i<n)
{
if(pattern[i]==pattern[j])
{
j++;
lps[i]=j;
i++;
}
else {
if(!j) {
lps[i]=0;
i++;
}
else {
j=lps[j-1];
}
}
}
}
int main() {
int n;
cin>>n;
cin.get();
for(int j=0;j<n;j++) {
string x;
getline(cin,x);
LPS(x);
int lmax=-1,poz = 0;
for(int i=0;i<x.length();i++)
if(lps[i]>lmax) {
lmax=lps[i];
poz=i;
}
if(lmax==0)
cout << 0 << '\n';
else {
int pref=poz-lmax+1;
cout << pref*(lmax/pref+1) << endl;
for(int i=0;i<x.length();i++)
lps[i]=0;
}
}
return 0;
}