Cod sursa(job #1709670)

Utilizator refugiatBoni Daniel Stefan refugiat Data 28 mai 2016 13:20:35
Problema Rsir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <fstream>
#define mkp make_pair
using namespace std;
ifstream si("rsir.in");
ofstream so("rsir.out");
int a,b,x,y,r,v1[7010],v2[7010],mod;
pair<int,int> nxt(pair<int,int> x)
{
    int val=v1[x.first]+v2[x.second];
    if(val>=mod)
        val-=mod;
    return mkp(x.second,val);
}
int main()
{
    int t0,t1,cpb=0,cb=0;
    long long n;
    si>>t0>>t1>>a>>b>>x>>y>>r>>mod>>n;
    t0%=mod;
    t1%=mod;
    if(n==0)
    {
        so<<t0;
        return 0;
    }
    int i;
    for(i=0;i<=mod;++i)
    {
        v1[i]=(1LL*i*i*a+i*x+r)%mod;
        v2[i]=(1LL*i*i*b+i*y)%mod;
    }
    pair<int,int> el1=mkp(t0,t1),el2=mkp(t0,t1);
    while(1)
    {
        cpb++;
        if(n==cpb)
        {
            so<<el1.second;
            return 0;
        }
        el1=nxt(el1);
        el2=nxt(nxt(el2));
        if(el1==el2)
            break;
    }
    while(1)
    {
        cb++;
        el1=nxt(el1);
        if(el1==el2)
            break;
    }
    n=(n-cpb)%cb;
    if(n==0)
        n=cb;
    for(i=2;i<=n;++i)
        el1=nxt(el1);
    so<<el1.second;
    return 0;
}