Pagini recente » Cod sursa (job #1818764) | Cod sursa (job #2394759) | Cod sursa (job #1926151) | Cod sursa (job #2409943) | Cod sursa (job #1649234)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#include <string>
#include <iomanip>
#include <stack>
#include <string.h>
#define pb push_back
#define mp make_pair
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int n,p[1000002];
char s[1000002];
void pref()
{
int k=0;
for(int i=1; s[i]; i++)
{
while(k>0 and s[k]!=s[i]) k=p[k-1];
if(s[k]==s[i]) k++;
p[i]=k;
}
int i=strlen(s);
for (; i>0; --i)
if (p[i] * 2 == (i + 1))
{
g<< i + 1<<'\n';
break;
}
else if (p[i] * 2 > (i + 1) && p[i]%((i+1)-p[i])== 0)
{
g << i + 1<<'\n';
break;
}
if (i == 0)
g<< 0<<'\n';
}
void rezolva()
{
pref();
}
void citire()
{
f>>n;
for(int i=1; i<=n; i++)
{
f>>s;
rezolva();
}
}
int main()
{
citire();
return 0;
}