Cod sursa(job #483031)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 6 septembrie 2010 17:02:23
Problema Reguli Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<algorithm>
using namespace std;

#define DIM 1001

int n,pi[DIM],a[DIM];

void kmp ()
{
    int i,q=0;

    for(i=2;i<=n;++i)
    {
        while(q>0 && a[q+1]!=a[i])
            q=pi[q];
        if(a[q+1]==a[i])
            ++q;
        pi[i]=q;
    }
}

int solve ()
{
    int i,vf,ok=0;

    for(i=n-1;i>0;--i)
        if(!pi[i])
            return i;
        else
        {
            if(pi[i+1]<pi[i] && !ok)
            {
                vf=pi[i];
                ok=1;
            }
            if(pi[i+1]<pi[i] && ok && pi[i]!=vf)
                return i;
        }
}
int main ()
{
    freopen("reguli.in","r",stdin);
    freopen("reguli.out","w",stdout);
    int i,vf;

    scanf("%d%d",&n,&a[1]);
    for(i=2;i<=n;++i)
    {
        scanf("%d",&a[i]);
        a[i-1]=a[i]-a[i-1];
    }
    --n;

    kmp ();

    vf=solve ();

    printf("%d\n",vf);
    for(i=1;i<=vf;++i)
        printf("%d\n",a[i]);
    return 0;
}