Cod sursa(job #2432119)

Utilizator Garen456Paun Tudor Garen456 Data 22 iunie 2019 12:05:07
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
#define nmax 1000005
using namespace std;

char a[nmax];
int n , pi[nmax];
int isPeriodic[nmax] ;
int maxi;

ifstream fin("prefix.in");
ofstream fout("prefix.out");

void make_prefix()
{   int k = 0;
    pi[1] = 0;
    for(int i =2 ;i<=n;++i)
    {
        while(k>0 && a[k+1] != a[i])
            k =pi[k];

        if( a[k+1] == a[i] )
            ++k;
        pi[i]=k;
    }
}

int main()
{int t;
fin>>t;
    while(t--)
    {   maxi = 0;
        fin >> a+1;
    n = strlen(a+1);
    make_prefix();

    for(int i=1;i<=n;++i)
        isPeriodic[i] =0;
    ///cout << n << "\n";
    for(int i=1;i<=n;++i)
            if( i%2 == 0  && pi[i] == i/2 )
            {
                isPeriodic[i] = pi[i];
                maxi =i;
            }
            else if( isPeriodic[pi[i]] == i - pi[i]  )
            {   maxi = i;
                isPeriodic[ i ] = isPeriodic[pi[i]];
            }
    fout << maxi;
    fout <<'\n';
    }
    return 0;
}