Cod sursa(job #2182569)

Utilizator Bodo171Bogdan Pop Bodo171 Data 22 martie 2018 14:52:06
Problema Rsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
using namespace std;
const int nmax=7005;
int A[nmax],B[nmax];
long long len,poz,n;
int mod,t0,t1,a,b,x,y,z,i;
pair<int,int> p0,p1;
pair<int,int> ff(pair<int,int> X)
{
    return {X.second,A[X.first]+B[X.second]-mod*(A[X.first]+B[X.second]>=mod)};
}
int nr(int l)
{
    p0={t0,t1};
    for(i=1;i<=l;i++)
        p0=ff(p0);
    return p0.first;
}
int main()
{
    ifstream f("rsir.in");
    ofstream g("rsir.out");
    f>>t0>>t1>>a>>b>>x>>y>>z>>mod>>n;
    for(i=0;i<mod;i++)
    {
        A[i]=((((i*i)%mod)*a)%mod+(x*i)%mod+z)%mod;
        B[i]=((((i*i)%mod)*b)%mod+(y*i)%mod+z)%mod;
    }
    p0=p1={t0,t1};
    while(p0!=p1)
    {
        p0=ff(p0);
        p1=ff(ff(p1));
    }
    p0={t0,t1};poz=0;
    while(p0!=p1)
    {
        p0=ff(p0);
        p1=ff(p1);
        poz++;
    }
    p1=ff(p0);len=1;
    while(p1!=p0)
    {
        p1=ff(p1);
        len++;
    }
    p0={t0,t1};
    if(n<poz) g<<nr(n)<<'\n';
    else g<<nr(poz+(n-poz)%len)<<'\n';
    return 0;
}