Cod sursa(job #112167)

Utilizator sealTudose Vlad seal Data 3 decembrie 2007 16:13:11
Problema Rsir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<stdio.h>
#define Mm 7000

int main()
{
    int V0[Mm],V1[Mm],T0,T1,a,b,x,y,z,m,t0,t1,t2,a0,a1,a2,i,k,l;
    long long n;

    freopen("rsir.in","r",stdin);
    scanf("%d%d%d%d%d%d%d%d%lld",&T0,&T1,&a,&b,&x,&y,&z,&m,&n);

    for(i=0;i<m;++i)
    {
        V0[i]=(a*i%m*i+x*i)%m;
        V1[i]=(b*i%m*i+y*i)%m;
    }

    t0=T0%m; t1=T1%m; k=m*m;
    for(i=1;i<k;++i)
    {
        t2=V0[t0]+V1[t1]+z;
        if(t2>=m)
            t2-=m;
        if(t2>=m)
            t2-=m;
        t0=t1; t1=t2;
    }

    a0=t0; a1=t1; k=0;
    do
    {
        a2=V0[a0]+V1[a1]+z;
        if(a2>=m)
            a2-=m;
        if(a2>=m)
            a2-=m;
        a0=a1; a1=a2; ++k;
    } while(a0!=t0 || a1!=t1);

    a0=t0=T0%m; a1=t1=T1%m;
    for(i=0;i<k;++i)
    {
        t2=V0[t0]+V1[t1]+z;
        if(t2>=m)
            t2-=m;
        if(t2>=m)
            t2-=m;
        t0=t1; t1=t2;
    }

    l=0;
    while(a0!=t0 || a1!=t1)
    {
        ++l;
        t2=V0[t0]+V1[t1]+z;
        if(t2>=m)
            t2-=m;
        if(t2>=m)
            t2-=m;
        t0=t1; t1=t2;

        a2=V0[a0]+V1[a1]+z;
        if(a2>=m)
            a2-=m;
        if(a2>=m)
            a2-=m;
        a0=a1; a1=a2;
    }

    if(n<l)
        t0=T0%m, t1=T1%m, k=n;
    else
        k=(n-l)%k;

    for(i=0;i<k;++i)
    {
        t2=V0[t0]+V1[t1]+z;
        if(t2>=m)
            t2-=m;
        if(t2>=m)
            t2-=m;
        t0=t1; t1=t2;
    }

    freopen("rsir.out","w",stdout);
    printf("%d\n",t0);
    return 0;
}