Pagini recente » Cod sursa (job #344603) | Cod sursa (job #2478400) | Cod sursa (job #2919310) | Cod sursa (job #2748775) | Cod sursa (job #3147901)
#include <fstream>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
const int STRLEN_MAX = 1e6;
char str[STRLEN_MAX + 1];
int lps[STRLEN_MAX];
void ComputeLPS(const char *s){
int i = 1, pslen;
lps[0] = 0;
while(s[i]){
pslen = lps[i - 1];
while(pslen && s[pslen] != s[i])
pslen = lps[pslen - 1];
if(s[pslen] == s[i])
lps[i] = pslen + 1;
else
lps[i] = 0;
++i;
}
}
int main(){
int tests;
fin >> tests;
for(int test = 0; test < tests; ++test){
fin >> str;
if(test == 2)
int y = 5;
ComputeLPS(str);
int i = 0, ans = 0, pLen;
while(str[i]){
pLen = i + 1 - lps[i];
if(pLen != i + 1 && (i + 1) % pLen == 0)
ans = i + 1;
++i;
}
fout << ans << '\n';
}
fin.close();
fout.close();
return 0;
}