Cod sursa(job #2999905)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 11 martie 2023 18:16:19
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <iostream>
#include <fstream>
#include <algorithm>

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

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

const int MOD=666013;
const int NMAX=3;

int mat[NMAX][NMAX];
int aux[NMAX][NMAX];
int init[NMAX][NMAX];

int x,y,z,a,b,c;

void inmultire(int a[3][3],int b[3][3])
{
    int x,i,j;
    int aux2[3][3];
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            aux2[i][j]=0;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        {
            for(x=0;x<3;x++)
                aux2[i][j]=(aux2[i][j]+1LL*a[i][x]*b[x][j])%MOD;
        }
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            aux[i][j]=aux2[i][j];
}

void lgput(int b)
{
    if(b==0)
        return ;
    else
    {
        if(b%2==0)
        {
            lgput(b/2);
            inmultire(aux,aux);
        }
        else
        {
            lgput(b/2);
            inmultire(aux,aux);
            inmultire(mat,aux);
        }
    }
}

void reset()
{
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            init[i][j]=mat[i][j]=aux[i][j]=0;
    aux[0][0]=aux[1][1]=aux[2][2]=1;
    mat[0][2]=c;
    mat[1][2]=b;
    mat[2][2]=a;
    mat[1][0]=mat[2][1]=1;
    init[0][0]=x;
    init[0][1]=y;
    init[0][2]=z;
}

int main()
{
    int t,n,i,j;
    fin>>t;
    while(t--)
    {
        fin>>x>>y>>z>>a>>b>>c>>n;
        reset();
        n=n-2;
        lgput(n);
        inmultire(init,aux);
        fout<<aux[0][2]<<"\n";
    }
    return 0;
}