Pagini recente » Cod sursa (job #38711) | Cod sursa (job #474260) | Cod sursa (job #2454193) | Cod sursa (job #535556) | Cod sursa (job #1365785)
#include <fstream>
#include <cstring>
#define NMAX 1000005
using namespace std;
char c,a[NMAX];
int i,nr,teste,phi[NMAX];
inline void prefix()
{
for (int i=0;i<=nr;i++)
phi[i]=0;
int k=0;
for (int i=2;i<=nr;i++)
{
while (k && a[k+1]!=a[i])
k=phi[k];
if (a[k+1]==a[i])
k++;
phi[i]=k;
}
}
int main()
{
ifstream f("prefix.in");
ofstream g("prefix.out");
f>>teste;
f>>noskipws>>c;
for (;teste;teste--)
{
nr=0;
while (f>>noskipws>>a[++nr] && a[nr]!='\n');
prefix();
for (i=nr;i>=1;i--)
if (phi[i] && i%(i-phi[i])==0)
{
g<<i<<'\n';
break;
}
if (i==0)
g<<0<<'\n';
}
}