Cod sursa(job #1147847)

Utilizator SpiriFlaviuBerbecariu Flaviu SpiriFlaviu Data 20 martie 2014 10:48:09
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <cstring>

using namespace std;

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

char c[1000005];
int pi[1000005];

int main()
{
    int T;
    fin>>T;
    fin.getline(c,200);
    for(int q = 1; q<=T; q++)
    {
        fin.getline(c+1,1000002);
        int n = strlen(c+1);
        pi[1] = 0;
        int k = 0;
        int times = 2;
        int kmax = 0;
        for(int i=2;i<=n;i++)
        {
            while(k && c[i] != c[k+1])
                k = pi[k];
            if(c[i] == c[k+1])
                ++k;
            pi[i] = k;
        }
        bool found = false;
        for(int i=n;i && !found;i--)
            if(pi[i] && i%(i-pi[i]) == 0)
            {
                found = true;
                fout<<i<<'\n';
            }
        if(!found)
            fout<<"0\n";

        for(int i=1;i<=n;i++)
        {
            c[i] = 0;
            pi[i] = 0;
        }
    }



    fin.close();
    fout.close();
    return 0;
}