Pagini recente » Cod sursa (job #581068) | Cod sursa (job #2581630) | Cod sursa (job #879090) | Cod sursa (job #2571174) | Cod sursa (job #579084)
Cod sursa(job #579084)
#include <fstream>
#include <cstring>
#include <vector>
#define DIM 1100001
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
char cuv[DIM];
int t;
int sol;
int KMP();
int main()
{
fin >> t;
while (t--)
{
fin >> cuv + 1;
fout << KMP() << '\n';
}
fin.close();
fout.close();
return 0;
}
int KMP()
{
int k(0), sol(0);
int n = strlen(cuv+1);
vector<int> pi(n+1);
pi[1] = 0;
for (int i = 2; i <= n; ++i)
{
while (k > 0 && cuv[k+1] != cuv[i])
k = pi[k];
if (cuv[k+1] == cuv[i])
k++;
pi[i] = k;
if (k != 0 && i % (i-k) == 0) sol = i;
}
return sol;
}