Cod sursa(job #2290378)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 26 noiembrie 2018 14:10:30
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>

using namespace std;
char v[1000001];
int p[1000001];
void prefix(int n){
    int i,k;
    k=0;
    for (i=2;i<=n;i++){
        while (k && v[k+1]!=v[i])
            k=p[k];
        if (v[k+1]==v[i])
            k++;
        p[i]=k;
    }
}
int main()
{
    FILE *fin=fopen ("prefix.in","r");
    FILE *fout=fopen ("prefix.out","w");
    int t,n,i,pc,poz,l,st;
    char c;
    fscanf (fin,"%d\n",&t);
    for (;t;t--){
        c=fgetc (fin);
        n=0;
        while (c!='\n'){
            v[++n]=c;
            c=fgetc (fin);
        }
        prefix (n);
        st=0;
        poz=0;
        l=0;
        for (i=1;2*i<=n;i++){
            if (p[2*i]==i){
                st=1;
                l=i;
                poz=i;
            }
        }
        if (!st){
            fprintf (fout,"0\n");
            continue;
        }
        pc=poz;
        while (pc+poz<=n && p[pc+poz]>=poz){
            l+=poz;
            pc+=poz;
        }
        fprintf (fout,"%d\n",l);
    }
    return 0;
}