Cod sursa(job #2865861)

Utilizator vlad_maneaManea Vlad Cristian vlad_manea Data 9 martie 2022 11:12:57
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>

#define MOD 666013

using namespace std;

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

int t, n, x, y, z, a, b, c;
int f[5][5], r[5][5], bz[5][5], aux[5][5];

void copiere(int x[5][5], int y[5][5])
{
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
            x[i][j]=y[i][j];
}

void init()
{
    f[0][0]=a;
    f[0][1]=b;
    f[0][2]=c;
    f[1][0]=1;
    f[1][1]=0;
    f[1][2]=0;
    f[2][0]=0;
    f[2][1]=1;
    f[2][2]=0;
    copiere(r, f);
    copiere(bz, f);
}

void mult(int x[5][5], int y[5][5], int z[5][5])
{
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
            for(int k=0; k<3; k++)
                z[i][j]+=(x[i][k]*y[k][j])%MOD;
}

void puteri()
{
    if(n==1)
        fout<<x<<"\n";
    else if(n==2)
        fout<<y<<"\n";
    else if(n==3)
        fout<<z<<"\n";
    else
    {
        n-=3;
        while(n)
        {
            if(n%2==0)
            {
                mult(bz, bz, aux);
                copiere(bz, aux);
                n/=2;
            }
            else
            {
                mult(r, bz, aux);
                copiere(r, aux);
                n--;
            }
        }
        fout<<x*r[0][0]+y*r[0][1]+z*r[0][2]<<"\n";
    }
}

void citire()
{
    fin>>t;
    for(int i=0; i<t; i++)
    {
        fin>>x>>y>>z>>a>>b>>c>>n;
        init();
        puteri();
    }
}

int main()
{
    citire();
    return 0;
}