Cod sursa(job #2777237)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 22 septembrie 2021 17:20:01
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
#define MOD 666013

using namespace std;

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

int t, x, y, z, a, b, c, k;
int v[5][5], mat[5][5];

void prod(int n, int m, int a[5][5], int b[5][5]){
    int c[5][5];
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++){
            c[i][j]=0;
            for(int l=1; l<=m; l++)
                c[i][j] = (c[i][j] + 1LL * a[i][l] * b[l][j] % MOD) % MOD;
        }

    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            a[i][j]=c[i][j];
}

int main (){
    fin>>t;
    while(t--){
        fin>>x>>y>>z>>a>>b>>c>>k; k-=2;

        v[1][1]=x;
        v[1][2]=y;
        v[1][3]=z;

        mat[1][1]=0; mat[1][2]=0; mat[1][3]=c;
        mat[2][1]=1; mat[2][2]=0; mat[2][3]=b;
        mat[3][1]=0; mat[3][2]=1; mat[3][3]=a;

        while(k != 0){
            if(k%2 == 1)
                prod(1, 3, v, mat);
            prod(3, 3, mat, mat);
            k/=2;
        }

        fout<<v[1][3]<<"\n";
    }
    return 0;
}

/**
(x, y, z) * (0, 0, c) = (y, z, a*z + b*y + c*x)
            (1, 0, b)
            (0, 1, a)
**/