Cod sursa(job #2137735)

Utilizator stelian2000Stelian Chichirim stelian2000 Data 21 februarie 2018 00:03:15
Problema Rsir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int val1[7010],val2[7010],mod;

int urm(pair<int,int> v)
{
    int val=val1[v.first]+val2[v.second];
    if(val>=mod) val-=mod;
    return val;
}

int main()
{
    freopen("rsir.in","r",stdin);
    freopen("rsir.out","w",stdout);
    int t0,t1,a,b,x,y,z;
    long long n;
    scanf("%d%d%d%d%d%d%d%d%lld",&t0,&t1,&a,&b,&x,&y,&z,&mod,&n);
    t0%=mod;
    t1%=mod;
    if(n==0) {printf("%d",t0);return 0;}
    if(n==1) {printf("%d",t1);return 0;}
    for(int i=0;i<mod;i++)
    {
        val1[i]=(1LL*a*i*i+x*i+z)%mod;
        val2[i]=(1LL*b*i*i+y*i)%mod;
    }
    pair<int,int> p0,p1;
    int poz=1;
    p0={t0,t1};
    p1=p0;
    p0={t1,urm(p0)};
    p1={t1,urm(p1)};
    p1={p1.second,urm(p1)};
    while(p0!=p1)
    {
        if(n==poz)
        {
            printf("%d",p0.first);
            return 0;
        }
        poz++;
        p0={p0.second,urm(p0)};
        p1={p1.second,urm(p1)};
        p1={p1.second,urm(p1)};
    }
    n%=poz;
    for(int i=1;i<=n;i++) p0={p0.second,urm(p0)};
    printf("%d",p0.first);
    return 0;
}