Cod sursa(job #1761022)

Utilizator Athena99Anghel Anca Athena99 Data 21 septembrie 2016 18:16:03
Problema Rsir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

using namespace std;

ifstream fin("rsir.in");
ofstream fout("rsir.out");

typedef long long i64;

const int mmax= 7000;

int t0, t1, a, b, x, y, z, m;
i64 n;

int k1[mmax+1], k2[mmax+1];

int main(  ) {
    fin>>t0>>t1>>a>>b>>x>>y>>z>>m>>n;
    t0%= m, t1%= m;
    for ( int i= 0; i<m; ++i ) {
        k1[i]= (i*i%m*a+i*x)%m;
        k2[i]= (i*i%m*b+i*y)%m;
    }

    for ( int i= 1, aux; i<=n && i<=m*m; ++i ) {
        for ( aux= k1[t0]+k2[t1]+z; aux>=m; aux-= m ) ;
        t0= t1, t1= aux;
    }

    if ( n>m*m ) {
        int ans= 0, last0= t0, last1= t1;
        for ( int i= 1, aux; i<=n-m*m && ans==0; ++i ) {
            for ( aux= k1[t0]+k2[t1]+z; aux>=m; aux-= m ) ;
            t0= t1, t1= aux;

            if ( last0==t0 && last1==t1 ) {
                ans= i;
            }
        }

        n= (n-m*m)%ans;
        for ( int i= 1, aux; i<=n; ++i ) {
            for ( aux= k1[t0]+k2[t1]+z; aux>=m; aux-= m ) ;
            t0= t1, t1= aux;
        }
    }

    fout<<t0<<"\n";

    return 0;
}