Pagini recente » Cod sursa (job #2953627) | Cod sursa (job #1145599) | Cod sursa (job #241661) | Cod sursa (job #2718005) | Cod sursa (job #2481554)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
string s;
int p[1000041];
int maxi;
void prefixify(){
maxi = 0;
int x = 0;
for(int i = 2; i < s.size(); i++){
while(x > 0 && s[i] != s[x+1]){
x = p[x];
}
if(s[i] == s[x+1]){
x++;
}
p[i] = x;
int d = i-x;
if(x != 0 && i % d == 0){
maxi = max(maxi, (i/d)*d);
}
}
}
int main(){
s.reserve(1000041);
int n;
fin >> n;
for(int i = 0; i < n; i++){
fin >> s;
s.insert(s.begin(), ' ');
prefixify();
fout << maxi << "\n";
}
}