Cod sursa(job #974460)

Utilizator monica11Szekely Monica monica11 Data 17 iulie 2013 12:02:59
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
//#include<cstdio>
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int t,n,p[10000001],a[10000001],sol,i,j,k;
char s[10000001],c;
int main()
{
    //freopen("prefix.in","r",stdin);
    //freopen("prefix.out","w",stdout);
    //scanf("%d",&t);
    f>>t;
    for(i=0;i<=t;i++)
    {
        //scanf("%s",&s);
        f.getline(s,10000001);
        n=strlen(s);
        for(j=n;j>0;j--)
            s[j]=s[j-1];
        p[1]=0;
        for(k=0,j=2;j<=n;j++)
        {
            //k=0;
            while(k&&s[k+1]!=s[j])
                k=p[k];
            if(s[k+1]==s[j])
                k++;
            p[j]=k;
        }
        sol=0;
        for(j=1;j<=n;j++)
            if((j-p[j]==p[j])||(j-p[j]==p[j]-p[p[j]]&&a[p[j]]))
            {
                a[j]=1;
                sol=j;
            }
            else
                a[j]=0;
                //printf("%d\n",sol);
                g<<sol<<"\n";
    }
    return 0;
}