Cod sursa(job #2767079)

Utilizator marcumihaiMarcu Mihai marcumihai Data 4 august 2021 18:22:59
Problema Rsir Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.34 kb
#include <bits/stdc++.h>

using namespace std;

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




int t1,t0,a,b,x,y,z,mod,n;
int iepure, ajutiepure, testoasa, ajuttestoasa;
 int vect[100005]= {0};

int modul(int val)
{
    while(val>mod)
        val=val-mod;
    return val;
}

void urmatoriepure(int &i, int &j)
{
    int aux=i;
    i=a*j*j+b*i*i+x*j+y*i+z;
    i=modul(i);
    j=aux;


    aux=i;
    i=a*j*j+b*i*i+x*j+y*i+z;
    i=modul(i);
    j=aux;


}


void urmatortestoasa(int &i, int &j)
{
    int aux=i;
    i=a*j*j+b*i*i+x*j+y*i+z;
    i=modul(i);
    j=aux;
}

int main()
{
    f>>t0>>t1>>a>>b>>x>>y>>z>>mod>>n;

    iepure=t1;
    ajutiepure=t0;
    urmatoriepure(iepure, ajutiepure);

    testoasa=t1;
    ajuttestoasa=t0;
    urmatortestoasa(testoasa, ajuttestoasa);

    while(iepure!=testoasa)
    {
        urmatoriepure(iepure, ajutiepure);
        urmatortestoasa(testoasa, ajuttestoasa);

    }


    int lungimeciclu=0;
    urmatortestoasa(testoasa, ajuttestoasa);

    while(iepure!=testoasa)
    {
        ++lungimeciclu;
        urmatortestoasa(testoasa, ajuttestoasa);
    }



    int inceputciclu=0;
    testoasa=t1;
    ajuttestoasa=t0;

    iepure=t1;
    ajutiepure=t0;
    for(int i=1; i<=lungimeciclu; ++i)
        urmatortestoasa(iepure, ajutiepure);



    testoasa=t1;
    ajuttestoasa=t0;

    for(int i=1; i<=n; ++i)
    {
        vect[i]=testoasa;
        if(i>lungimeciclu)
        {
            if(vect[i]==vect[i-lungimeciclu-1] )
            {
                inceputciclu=i-lungimeciclu-1;
                break;

            }
        }
        urmatortestoasa(testoasa, ajuttestoasa);
    }

    if(n<=inceputciclu)
    {
        testoasa=t1;
        ajuttestoasa=t0;
        for(int i=2; i<=n; ++i)
            urmatortestoasa(testoasa, ajuttestoasa);

        g<<testoasa;
    }

    else
    {
        int x=n-inceputciclu;
        while(x>lungimeciclu+1)
            x-=lungimeciclu+1;

        int loc=x;

        testoasa=t1;
        ajuttestoasa=t0;

        for(int i=1; i<=inceputciclu; ++i)
            urmatortestoasa(testoasa, ajuttestoasa);

        for(int i=2; i<=loc; ++i)
        {
            urmatortestoasa(testoasa, ajuttestoasa);

        }

        g<<testoasa;
    }


    return 0;
}