Cod sursa(job #3222070)

Utilizator adrian_zahariaZaharia Adrian adrian_zaharia Data 8 aprilie 2024 23:20:26
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;


ll s[3];
ll A,B,C;
const int MOD = 666013;
ll n;
struct Matrix{
    int size;
    vector<vector<ll>> v;
    Matrix(int _size) : size(_size){
        v = vector<vector<ll>>(size, vector<ll>(size));
        for(int i=0;i<size;i++) v[i][i] = 1;
    }
    Matrix(int _size,vector<vector<ll>> _v) : size(_size){
        v = vector<vector<ll>>(size, vector<ll>(size));
        for(int i=0;i<size;i++)
            for(int j=0;j<size;j++)
                v[i][j] = _v[i][j];
    }
    Matrix(int _size, int val) : size(_size){
        v = vector<vector<ll>>(size, vector<ll>(size));
        for(int i=0;i<size;i++)
            for(int j=0;j<size;j++)
                v[i][j] = val;
    }
    Matrix operator * (const Matrix &other){
        Matrix ans(size,0);
        for(int k=0;k<size;k++)
            for(int j=0;j<size;j++)
                for(int i=0;i<size;i++)
                    ans.v[i][j] = (ans.v[i][j] + this->v[i][k] * other.v[k][j])%MOD;
        return ans;
    }
};

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
#define cin fin
#define cout fout
int main(){

    int t;
    cin>>t;
    while(t--){
        cin>>s[0]>>s[1]>>s[2]>>A>>B>>C>>n;
        Matrix a(3,{{0,1,0},{0,0,1},{C,B,A}}), ans(3);

        while(n){
            if(n&1) ans = ans * a;
            a = a * a;
            n>>=1;
        }
        ll answer = 0;
        for(int i=0;i<3;i++) answer = (answer + s[i] * ans.v[0][i])%MOD;
        cout<<answer<<'\n';
    }
    return 0;
}