Cod sursa(job #3288372)
Utilizator | Data | 21 martie 2025 19:29:24 | |
---|---|---|---|
Problema | Prefix | Scor | 90 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.34 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
string n,v;
int len,lps[2000005],i,t,lst,j,poz;
int main()
{
in>>t;
while(t--)
{
in>>n;
len=0;
lps[0]=0;
for(i=1; n[i]; ++i)
{
if(n[i]==n[len])
++len,lps[i]=len;
else if(!len)
lps[i]=0;
else
{
while(len)
{
len=lps[len-1];
if(n[i]==n[len])
{
++len;
lps[i]=len;
break;
}
}
}
}
lst=0;
for(i=0; n[i]; ++i)
if(lps[i]*2==i+1)
lst=lps[i];
if(!lst)
{
out<<0<<'\n';
}
else
{
v="";
for(i=0; i<lst; ++i)
v+=n[i];
poz=0;
for(i=0,j=0; n[i]; ++i)
{
if(v[j]==n[i])
{
++j;
if(j==v.size())
j=0,poz=i+1;
}
else break;
}
out<<poz<<'\n';
}
}
}