Cod sursa(job #1808796)

Utilizator NineshadowCarapcea Antonio Nineshadow Data 18 noiembrie 2016 09:46:13
Problema Rsir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("rsir.in");
ofstream out("rsir.out");
long long t0,t1,a,b,x,y,z,mod,n,p[2][7001];
pair<int,int> next(pair<int,int> q)
{
    int v=p[0][q.first]+p[1][q.second];
    if(v>=mod)v-=mod;
    return make_pair(q.second, v);
}
int main()
{
    in>>t0>>t1>>a>>b>>x>>y>>z>>mod>>n;
    if(n==0)
    {
        out<<t0;
        return 0;
    }
    if(n==1)
    {
        out<<t1;
        return 0;
    }
    for(int i=0; i<mod; ++i)
    {
        p[0][i]=(((i*i)%mod)*a+i*x+z)%mod;
        p[1][i]=(((i*i)%mod)*b+i*y)%mod;
    }
    pair<int,int> p1(t0%mod,t1%mod),p2(p1);
    if (n < 1000000){
      for (int i = 1; i < n; ++i) p1 = next(p1);
      out<<p1.second;
      return 0;
    }
    int i=1;
    do{
        i++;
        p1=next(p1);
        p2=next(next(p2));
    }while(p1!=p2);
    n=(n-i)%(i-1);
    for(i=0;i<n;++i)p1=next(p1);
    out<<p1.second;
    return 0;
}