Pagini recente » Profil UTCN_Borsos_Lorinczi_Mandici | Cod sursa (job #1469394) | Cod sursa (job #2802253) | Cod sursa (job #676405) | Cod sursa (job #3163585)
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
vector<int> pi;
string x;
int KMP()
{
pi.clear();
pi.resize(x.size());
int k = 0;
pi[0] = 0;
int maxim = 0;
for(int i = 1; i < x.size(); i++)
{
while(k != 0 && x[i] != x[k])
k = pi[k-1];
if(x[k] == x[i])
k++;
pi[i] = k;
}
int rasp = 0;
for(int i = 0; i < x.size(); i++)
{
if((i+1) % (i+1-pi[i]) == 0 && pi[i] != 0)
rasp = i+1;
}
return rasp;
}
int main()
{
int t;
fin >> t;
for(int test = 0; test < t; test++)
{
fin >> x;
fout << KMP() << "\n";
}
return 0;
}