Cod sursa(job #1786478)

Utilizator Bodo171Bogdan Pop Bodo171 Data 23 octombrie 2016 00:11:35
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include<fstream>
#include<string>
using namespace std;
const int nmax=1000005;
string s;
int t,per[nmax],pi[nmax],i,k,mx;
int main()
{
    ifstream f("prefix.in");
    ofstream g("prefix.out");
    f>>t;
    for(int cnt=1;cnt<=t;cnt++)
    {
        f>>s;pi[0]=-1;mx=0;k=-1;
        for(i=0;i<s.size();i++)
            per[i]=0;
        for(i=1;i<s.size();i++)
        {
            while(k!=-1&&s[k+1]!=s[i])
                k=pi[k];
            if(s[k+1]==s[i]) k++;
            pi[i]=k;
            if(pi[i]!=-1)
            {
                if(2*pi[i]+2==i+1)
            {
                per[i]=pi[i]+1;
            }
            else
            {
                if(per[pi[i]]!=0&&pi[i]+1>(i+1)/2)
                {
                    if((i+1)%(per[pi[i]])==0)
                        per[i]=per[pi[i]];
                }
            }
            }
            if(per[i]!=0) mx=i+1;
        }
        g<<mx<<'\n';
    }
    return 0;
}