Cod sursa(job #3284636)

Utilizator andiRTanasescu Andrei-Rares andiR Data 11 martie 2025 23:41:36
Problema Rsir Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
// Author: Tanasescu Andrei-Rares
/*
     █████╗  ██████╗ ████████╗
    ██╔══██╗ ██╔══██╗╚══██╔══╝
    ███████║ ██████╔╝   ██║   
    ██╔══██║ ██╔══██╗   ██║   
    ██║  ██║ ██║  ██║   ██║   
    ╚═╝  ╚═╝ ╚═╝  ╚═╝   ╚═╝   
*/
#include <iostream>
#include <fstream>

#pragma GCC optimize("O3")

#define fi first
#define se second
#define pb push_back
#define pf push_front

using namespace std;

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

typedef long long ll;
typedef pair<int, int> pii;

const int Nmax=7e3+5;

ll a, b, x, y, z, t0, t1, MOD;
ll n;

int dp1[Nmax], dp2[Nmax];

void nxt(pii &t){
    t = {t.se, dp1[t.fi]+dp2[t.se]};
    if (t.se>MOD)
        t.se-=MOD;
}

int main()
{
    fin>>t0>>t1>>a>>b>>x>>y>>z>>MOD>>n;

    for (int i=0; i<Nmax; i++){
        dp1[i]=(a*i*i+x*i+z)%MOD;
        dp2[i]=(b*i*i+y*i)%MOD;
    }

    pii start={t0%MOD, t1%MOD};

    pii A=start;
    nxt(A);
    pii B=start;
    nxt(B); nxt(B);
    while (A!=B){
        nxt(A);
        nxt(B); nxt(B);
    }

    int lend=0;
    A=start;
    while (A!=B){
        nxt(A);
        nxt(B);
        lend++;
    }

    int lenc=1;
    pii art=A;
    B=A;
    nxt(B);
    while (A!=B){
        nxt(B);
        lenc++;
    }

    if (n<lend){
        A=start;
        while (n--)
            nxt(A);
        
        fout<<A.fi;
    }
    else{
        n-=lend;
        n%=lenc;

        A=art;
        while (n--)
            nxt(A);
        fout<<A.fi;
    }


    return 0;
}