Cod sursa(job #2687410)

Utilizator TheGodYatoBUGNAR CATALIN TheGodYato Data 20 decembrie 2020 01:04:26
Problema Prefix Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <iostream>
#include <fstream>
#define Nmax 90
#include <cstring>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int main()
{
    int p,i;
    fin>>p;
    for(; p; --p)
    {
        char a[Nmax];
        fin>>a;
        bool ok=true;
        int pi[Nmax],n=strlen(a),k=0,numar=1;
        for(i=1; i<=n; ++i)
            pi[i]=0;
        for(i=2; i<=n; ++i)
        {
            while(k && a[i-1]!=a[k])k=pi[k];
            if(a[i-1]==a[k])++k;
            pi[i]=k;
            if(ok && pi[i]==0)numar=i;
            else if(pi[i]!=0)ok=false;
        }
        if(2*numar>n)fout<<0<<'\n';
        else
        {
            bool ok2=true;
            for(i=n; i>=1; --i)
            {
                int current = pi[i];

                if(current!=0)
                {
                    int rest=i%current;
                    if(rest==0)
                    {
                        if(i%2==0 && current ==i/2)
                        {
                            fout<<i<<'\n';
                            ok2=false;
                            break;
                        }
                    }
                    else if(current%rest==0 && current ==(i-rest))
                    {
                        fout<<i<<'\n';
                        ok2=false;
                        break;
                    }
                }
            }
        if(ok2)fout<<0<<'\n';
        }
    }

return 0;
}