Pagini recente » Cod sursa (job #115653) | Cod sursa (job #1626349) | Cod sursa (job #328607) | Cod sursa (job #811451) | Cod sursa (job #2699333)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <algorithm>
#include <bitset>
#include <queue>
#define maxn 100005
#define maxv 1005
#define mod 998244353LL
// #define fin std::cin
// #define fout std::cout
std::ifstream fin("prefix.in");
std::ofstream fout("prefix.out");
int32_t main(){
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int Q;
fin >> Q;
while(Q --){
std::string s;
fin >> s;
int lp[s.size()] = {};
lp[0] = 0;
for(int i=1, k=0; i<s.size(); i++){
while(k > 0 and s[k] != s[i])
k = lp[k-1];
if(s[i] == s[k])
k ++;
lp[i] = k;
}
// for(int i=0; i<s.size(); i++)
// fout << lp[i] << ' ';
// fout << '\n';
bool foundSol = false;
for(int i=s.size()-1; i>=0 and foundSol == false; i--){
if(2*lp[i] == (i+1)){
fout << i+1 << '\n';
foundSol = true;
}
else if(2*lp[i] < i+1)
continue;
else{
int pref = (i+1) - lp[i];
if((2*lp[i] - i - 1) % pref == 0){
fout << i+1 << '\n';
foundSol = true;
}
}
}
if(foundSol == false)
fout << "0\n";
}
return 0;
}