Pagini recente » Cod sursa (job #725308) | Cod sursa (job #2309457) | Cod sursa (job #725587) | Cod sursa (job #378707) | Cod sursa (job #1469510)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
const char iname[] = "prefix.in";
const char oname[] = "prefix.out";
vector<int> getPrefix(const string P)
{
vector<int> pr;
pr.push_back(-1);
int m = P.length();
int k = -1;
for(int q = 1; q < m; q++)
{
while(k>-1 && P[k+1] != P[q])
k = pr[k];
if(P[k+1] == P[q])
k++;
pr.push_back(k);
}
return pr;
}
int main()
{
ifstream in(iname);
ofstream out(oname);
vector<int> pr;
string P;
int T;
in >> T;
for(int q = 0; q < T; q++)
{
in >> P;
pr = getPrefix(P);
int poz, dim = 0;
for(int i = 0; i < (int)pr.size(); i++)
{
// cout << i << ' ' << pr[i]+1 << '\n';
if(pr[i]+1 == 1) poz = i;
if((pr[i]+1 > 0) && ((pr[i]+1) % poz == 0)) dim = i+1;
}
out << dim << '\n';;
}
return 0;
}