Cod sursa(job #2443794)

Utilizator StanCatalinStanCatalin StanCatalin Data 29 iulie 2019 15:02:37
Problema Rsir Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int dim = 7005;

int t0,t1,a,b,x,y,z,mod,p[dim],s[dim];
long long int n;

pair <int ,int > testoasa,iepure;

pair<int,int> next(pair<int , int> x)
{
    pair<int,int> a;
    a.first = x.second;
    a.second = p[x.first] + s[x.second];
    a.first %= mod;
    a.second %= mod;
    return a;
}

int main()
{
    in >> t0 >> t1 >> a >> b >> x >> y >> z >> mod >> n;
    t0 %= mod;
    t1 %= mod;
    a %= mod;
    b %= mod;
    x %= mod;
    y %= mod;
    z %= mod;
    long long int acum;
    for (int i=0; i<mod; i++)
    {
        acum = 1LL*x*i;
        acum += 1LL*a*i*i;
        acum += z;
        acum %= mod;
        p[i] = acum;
        acum = 1LL*y*i;
        acum += 1LL*b*i*i;
        acum %= mod;
        s[i] = acum;
    }
    pair<int,int> start;
    start = make_pair(t0,t1);
    testoasa = start;
    iepure = next(start);
    while (testoasa != iepure)
    {
        testoasa = next(testoasa);
        iepure = next(next(iepure));
    }
    int len = 1;
    iepure = next(iepure);
    while (iepure != testoasa)
    {
        iepure = next(iepure);
        len++;
    }
    iepure = start;
    testoasa = start;
    for (int i=1; i<=len; i++)
    {
        iepure = next(iepure);
    }
    int poz = 0;
    while (iepure != testoasa)
    {
        iepure = next(iepure);
        testoasa = next(testoasa);
        poz++;
    }
    int st = (n-poz)%len;
    if (st == 0) st = len;
    for (int i=1; i<=st; i++)
    {
        iepure = next(iepure);
    }
    out << iepure.first;
    return 0;
}