Cod sursa(job #2066943)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 15 noiembrie 2017 18:16:35
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define N 1000005

using namespace std;

int n, t, poz[N], nr;
char s[N];

void prefix()
{
    int j=0, st=1;
    for(int i=2;i<=n;i++)
    {
        while(j && s[j+1]!=s[i])
            j=poz[j];
        if(s[j+1]==s[i])
            j++;
        poz[i]=j;
    }
}

void parcurgere()
{
    int st=1;
    for(int i=2;i<=n;i++)
    {
        if(poz[i] && st%(i-poz[i])==0)
            st=i, nr++, printf("%d ", i);
    }
}

int main()
{
    freopen("prefix.in", "r", stdin);
//    freopen("prefix.out", "w", stdout);
    scanf("%d\n", &t);
    for(int test=1;test<=t;test++)
    {
        fgets(s+1, N, stdin);
        n=strlen(s+1)-1;
        s[n+1]='\0';
        memset(poz, 0, sizeof(poz));
        prefix();
        parcurgere();
//        for(int i=1;i<=n;i++)
//            printf("%d ", poz[i]);
        printf("\n%d\n", nr);
    }
    return 0;
}