Cod sursa(job #3284630)

Utilizator andiRTanasescu Andrei-Rares andiR Data 11 martie 2025 23:29:44
Problema Rsir Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
// Author: Tanasescu Andrei-Rares
/*
     █████╗  ██████╗ ████████╗
    ██╔══██╗ ██╔══██╗╚══██╔══╝
    ███████║ ██████╔╝   ██║   
    ██╔══██║ ██╔══██╗   ██║   
    ██║  ██║ ██║  ██║   ██║   
    ╚═╝  ╚═╝ ╚═╝  ╚═╝   ╚═╝   
*/
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <deque>
#include <iomanip>
#include <vector>
#include <cassert>

#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;
typedef pair<ll, ll> pll;

const ll Nmax=1e6+5, inf=1e9+5;

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

pii nxt(pii t){
    return {t.se, (a*t.fi*t.fi + b*t.se*t.se + x*t.fi + y*t.se + z)%MOD};
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    fin>>t0>>t1>>a>>b>>x>>y>>z>>MOD>>n;

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

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

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

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

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

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


    return 0;
}