Cod sursa(job #3277210)

Utilizator burcuriciBucur Stefan burcurici Data 15 februarie 2025 13:49:56
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
#define MOD 666013
typedef long long mat[3][3];

long long n, x, y, z, a, b, c, m;

void mult(mat &X, mat Y)
{
    mat C;
    for(int i=0; i<=2; i++)
        for(int j=0; j<=2; j++)
            C[i][j]=X[i][j];
    for(int i=0; i<=2; i++)
        for(int j=0; j<=2; j++){
            X[i][j]=0;
            for(int k=0; k<=2; k++){
                X[i][j] = ((C[i][k]*Y[k][j])%MOD + X[i][j])%MOD;
            }
        }
}

void dub(mat &X)
{
    mat C;
    for(int i=0; i<=2; i++)
        for(int j=0; j<=2; j++)
            C[i][j]=X[i][j];
    for(int i=0; i<=2; i++)
        for(int j=0; j<=2; j++){
            X[i][j]=0;
            for(int k=0; k<=2; k++){
                X[i][j] = ((C[i][k]*C[k][j])%MOD + X[i][j])%MOD;
            }
        }
}

void cer()
{
    fin>>x>>y>>z>>a>>b>>c>>m;
    mat B={{a,1,0},{b,0,1},{c,0,0}},
        A={{1,0,0},{0,1,0},{0,0,1}};
    m-=2;

    while(m>0){
        if(m%2==1)
            mult(A,B);
        dub(B);
        m>>=1;
    }
    fout<<(z*A[0][0]%MOD + y*A[1][0]%MOD + x*A[2][0]%MOD)%MOD<<"\n";
}

int main()
{
    fin>>n;
    for(int i=0; i<n; i++)
        cer();
}