Pagini recente » Cod sursa (job #973951) | Cod sursa (job #1916843) | Cod sursa (job #1013570) | Cod sursa (job #1726120) | Cod sursa (job #2902225)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const int NMAX = 2e6;
int z[2 * NMAX + 1];
string s;
void zAlgorithm() {
int l, r;
l = r = 0;
for(int i = 0; i < s.size(); i++)
z[i] = 0;
for(int i = 1; i < s.size(); i++) {
if(i > r) {
l = r = i;
while(r < s.size() && s[r - l] == s[r])
r++;
r--;
z[i] = r - l + 1;
} else if(z[i - l] < r - i + 1) {
z[i] = z[i - l];
} else {
l = i;
while(r < s.size() && s[r - l] == s[r])
r++;
r--;
z[i] = r - l + 1;
}
}
}
string a, b;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int ans[NMAX];
int main() {
int t;
fin >> t;
while(t--) {
fin >> a;// >> b;
s = a;
zAlgorithm();
int maxx = 0;
for(int i = 1; i < s.size(); i++) {
if(z[i] >= i) {
maxx = max(maxx, (z[i] - z[i] % i) + i);
}
}
fout << maxx << endl;
}
/*int x = 0;
for(int i = 1; i < s.size(); i++) {
if(z[i] == a.size()) {
ans[x++] = i - (int)a.size() - 1;
}
}
fout << x << endl;
for(int i = 0; i < min(x, 1000); i++)
fout << ans[i] << ' ';
fin.close();
fout.close();*/
fin.close();
fout.close();
return 0;
}