Cod sursa(job #1679189)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 7 aprilie 2016 19:02:40
Problema Rsir Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
# include <fstream>
using namespace std;
ifstream fin("rsir.in");
ofstream fout("rsir.out");
struct inter {
    int f;
    int s;
};
inter a1,v1,v2;
long long n;
int a,b,x,y,z,m,MOD,e1,e2,c,i,l;
inter next (inter a1){
    long long aux=a1.f;
    a1.f=a*a1.s*a1.s;
    a1.f%=MOD;
    a1.f+=b*aux*aux;
    a1.f%=MOD;
    a1.f+=x*a1.s;
    a1.f%=MOD;
    a1.f+=y*aux;
    a1.f%=MOD;
    a1.f+=z;
    a1.f%=MOD;
    a1.s=aux;
    return a1;
}
int main () {
    fin>>e1>>e2>>a>>b>>x>>y>>z>>m>>n;
    e1%=m;
    e2%=m;
    a %=m;
    b %= m;
    x %= m;
    y %= m;
    z %= m;
    v1.f=e2;
    v1.s=e1;
    v2.f=e2;
    v2.s=e1;
    MOD=m;
    do{
        v1=next(v1);
        v2=next(next(v2));
    }
    while(v1.f!=v2.f||v1.s!=v2.s);
    v2=v1;
    do{
        v2=next(v2);
        c++;
    }
    while(v1.f!=v2.f||v1.s!=v2.s);
    v1.f=e2;
    v1.s=e1;
    v2=v1;
    for(i=2;i<=c+1;i++){
        v1=next(v1);
    }
    while(v1.f!=v2.f||v1.s!=v2.s){
        v2=next(v2);
        v1=next(v1);
        l++;
    }
    v2.f=v1.f;
    v2.s=v1.s;
    v1.f=e2;
    v1.s=e1;
    if(l>=n){
        for(i=1;i<=n;i++)
            v1=next(v1);
        fout<<v1.s<<"\n";
    }
    else{
        n-=l;
        n%=c;
        for(i=1;i<=n;i++){
            v2=next(v2);
        }
        fout<<v2.s<<"\n";
    }
    return 0;
}