Pagini recente » Cod sursa (job #1347014) | Cod sursa (job #35162) | Cod sursa (job #2471990) | Cod sursa (job #2159016) | Cod sursa (job #2354367)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
char s1[2000005], s2[2000005];
int pref[2000005], sz1, sz2, ans[1005], k;
void prefix()
{
int k = 0;
pref[1] = 0;
for(int i = 2; i <= sz1; i++) {
while(k > 0 && s1[k + 1] != s1[i]) k = pref[k];
if(s1[k + 1] == s1[i]) ++k;
pref[i] = k;
}
}
int main()
{
int t;
fin >> t;
fin.getline(s1 + 1, 2000003);
for(int j = 1; j <= t; j++) {
fin.getline(s1 + 1, 2000003);
sz1 = strlen(s1 + 1);
prefix();
int mx = 0;
for(int i = 1; i <= sz1; i++) {
if(i % (i - pref[i]) == 0 && pref[i]) mx = i;
pref[i] = 0;
}
fout << mx << "\n";
}
return 0;
}