Cod sursa(job #2754450)

Utilizator andu2006Alexandru Gheorghies andu2006 Data 25 mai 2021 21:03:40
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
typedef long long ll;
const ll MOD=666013;
struct matrix{
    vector<vector<ll>> data;
    ll l,w;
    matrix(ll n=0,ll m=0){
        l=n,w=m;
        data.resize(n);
        for(auto& it : data)
            it.resize(m);
    }
    matrix(vector<vector<ll>> b){
        data=b,l=b.size(),w=b.size()?(*b.begin()).size():0;
    }
    matrix operator * (matrix b){
        matrix ans(l,b.w);
        for(int i=0;i<l;i++){ /// w=b.l;
            for(int j=0;j<b.w;j++){
                for(int k=0;k<w;k++)
                    ans.data[i][j]+=data[i][k]*b.data[k][j],ans.data[i][j]%=MOD;
            }
        }
        return ans;
    }
};
matrix pw(matrix a, ll n){
    matrix ans(a); n--;
    for(;n;n>>=1,a=a*a)
        if(n&1)
            ans=ans*a;
    return ans;
}
void tc(){
    ll a,b,c,x,y,z,n;
    fin>>x>>y>>z>>a>>b>>c>>n;
    switch(n){
        case 0: fout<<x<<'\n'; break;
        case 1: fout<<y<<'\n'; break;
        case 2: fout<<z<<'\n'; break;
        default:{
            matrix step({{a,b,c},{1,0,0},{0,1,0}}),init({{z},{y},{x}});
            fout<<(pw(step,n-2)*init).data[0][0]<<'\n';
        }
    }
}
int main()
{
    ll t;
    fin>>t;
    while(t--)
        tc();
    return 0;
}