Cod sursa(job #3224937)

Utilizator andiRTanasescu Andrei-Rares andiR Data 16 aprilie 2024 16:04:29
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
// Author: Tanasescu Andrei-Rares
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <deque>
#include <iomanip>
#include <vector>
#include <cassert>

#pragma GCC optimize("O3")

#define fi first
#define se second
#define pb push_back
#define pf push_front

using namespace std;

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

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const ll Nmax=1e6+5, inf=1e9+5, MOD=666013;

int t, n;
ll x, y, z;
ll a, b, c;

inline void multiply(ll a[3][3], ll b[3][3]){
    ll sol[3][3]={};
    for (int l=0; l<3; l++)
        for (int c=0; c<3; c++)
            for (int i=0; i<3; i++)
                sol[l][c]+=a[l][i]*b[i][c]%MOD;
    for (int i=0; i<3; i++)
        for (int j=0; j<3; j++)
            a[i][j]=sol[i][j];
}
inline void exp(ll mat[3][3], int e){
    ll aux[3][3]={{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
    while (e!=1){
        if (e%2==0){
            e/=2;
            multiply(mat, mat);
        }
        else{
            e--;
            multiply(aux, mat);
        }
    }
    multiply(mat, aux);
}

int main(){

    fin>>t;
    while (t--){
        fin>>x>>y>>z>>a>>b>>c>>n;
        ll mat[3][3]={{a, 1, 0}, {b, 0, 1}, {c, 0, 0}};
        exp(mat, n-2);
        fout<<(z*mat[0][0]%MOD+y*mat[1][0]%MOD+x*mat[2][0]%MOD)%MOD<<'\n';
    }

    return 0;
}