Pagini recente » Cod sursa (job #2108019) | Cod sursa (job #882608) | Cod sursa (job #355076) | Cod sursa (job #1473324) | Cod sursa (job #2259733)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("prefix.in");
ofstream fo("prefix.out");
string s;
int pi[1000001];
bool periodic[1000001];//periodic[i] = este periodic prefixul de lungime i?
inline int get_pi(char ch, int i){
i = pi[i];
while(i != -1 && ch != s[i])
i = pi[i];
return i;
}
int main()
{
int n, ans;
fi >> n;
getline(fi, s);
for(int t = 0; t < n; t++){
getline(fi, s);
pi[0] = -1;
for(int i = 0; i < s.size(); i++)
pi[i + 1] = get_pi(s[i], i) + 1;
ans = 0;
for(int i = 1; i <= s.size(); i++)
if(pi[i] != 0 && ((periodic[pi[i]] && i - pi[i] == pi[i] - pi[pi[i]]) || i == 2 * pi[i])){
periodic[i] = true;
ans = i;
}
else
periodic[i] = false;
fo << ans << '\n';
}
fi.close();
fo.close();
return 0;
}