Cod sursa(job #2060903)

Utilizator cipri321Marin Ciprian cipri321 Data 8 noiembrie 2017 19:37:18
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
#include <string>
using namespace std;
ifstream fi("prefix.in");
ofstream fo("prefix.out");
int T;
string s;
int A[1000001];
void kmp(string s)
{
    A[0]=0;
    for(int i=1;i<s.size();i++)
    {
        int r=A[i-1];
		while(r>0)
		{
			if(s[i]==s[r])
				break;
			else
				r=A[r-1];
		}
		if(s[i]==s[r])
			A[i]=r+1;
		else
			A[i]=r;
    }
}
int main()
{
    fi>>T;
    for(int t=1;t<=T;t++)
    {
        fi>>s;
        kmp(s);
        int rez=-1;
        for(int i=0;i<s.size();i++)
            if(A[i]!=0&&(i+1)%(i+1-A[i])==0)
                rez=i;
        if(rez==-1)
            fo<<"0\n";
        else
            fo<<rez+1<<"\n";
    }
    return 0;
}