Cod sursa(job #2916051)
| Utilizator | Data | 27 iulie 2022 22:43:35 | |
|---|---|---|---|
| Problema | Prefix | Scor | 40 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.14 kb |
#include <iostream>
#include <fstream>
#include <cstring>
#define LMAX 1000005
using namespace std;
ifstream fi("prefix.in");
ofstream fo("prefix.out");
int T;
int LPS[LMAX];
void Solve(char txt[],int &S)
{
S=0;
bool var=false;
int len=0;
LPS[0]=0;
int i=1;
int inQ;
while(i<strlen(txt))
{
if(txt[i]==txt[len])
{
len++;
LPS[i]=len;
if(var==false)
{
if(len*2==i+1)
{
var=true;
inQ=len;
}
}if(var==true)
{
if((i+1)%inQ==0)
S=i+1;
}
i++;
}else
{
var=false;
if(len!=0)
len=LPS[len-1];
else
{
LPS[i]=0;
i++;
}
}
}
}
int main()
{
fi>>T;
for(int test=1;test<=T;test++)
{
char txt[LMAX];
fi>>txt;
int S;
Solve(txt,S);
fo<<S<<"\n";
}
return 0;
}
