Pagini recente » Cod sursa (job #2310127) | Cod sursa (job #2727855) | Cei mai harnici utilizatori infoarena | Cod sursa (job #741078) | Cod sursa (job #718204)
Cod sursa(job #718204)
#include <fstream>
#include <string.h>
#define MAX 1000050
using namespace std;
char sir[MAX]; int pfix[MAX], sol, t;
void getPrefix()
{
int i, q = 0, lgt = strlen(sir + 1);
for(i = 2; i <= lgt; i++)
{
while(q && sir[q + 1] != sir[i])
q = pfix[q];
if(sir[q + 1] == sir[i])
q++;
pfix[i] = q;
if(q && (i % (i - pfix[i]) == 0))
{
sol = i;
}
}
}
int main()
{
ifstream in("prefix.in"); ofstream out("prefix.out");
in>>t;in.getline(sir, MAX);
while(t--)
{
in.getline(sir + 1, MAX);
getPrefix();
out<<sol<<'\n';
}
in.close(); out.close();
return 0;
}