Cod sursa(job #2786811)

Utilizator davidg0022Gatea David davidg0022 Data 21 octombrie 2021 18:02:39
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include<vector>
#include<cmath>
using namespace std;
 
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
 
vector<vector<long>> Power2(vector<vector<long>> m,vector<vector<long>> n){
    vector<vector<long>> aux(3, vector<long>(3, 0));
    for (long  i = 0; i < 3;i++)
        for (long  j = 0; j < 3;j++)
            aux[i][j] = (m[i][0] * n[0][j] + m[i][1] * n[1][j] + m[i][2] * n[2][j]) % 666013;
    return aux;
}

void Power1(vector<vector<long>>& m,vector<vector<long>>& ans,long n){
    if(!n)
        return;
    if(n & 1)
        ans = Power2(ans, m),
        m = Power2(m, m),
        Power1(m, ans, n >> 1);
    else
        m = Power2(m, m),
        Power1(m, ans, n >> 1);
}
 
void solve(){
    long  x, y, z, a, b, c, n;
    vector<vector<long>> M(3, vector<long>(3, 0));
    vector<vector<long>> Ans(3, vector<long>(3, 0));
    cin >> x >> y >> z >> a >> b >> c >> n;
    Ans[0][0] = Ans[1][1] = Ans[2][2] = 1;
    //M[0][1] = M[1][2] = 1;
    M[2][0] = c;
    M[2][1] = b;
    M[2][2] = a;
    Power1(M, Ans, n - 2);
    cout << (Ans[2][0] * x + Ans[2][1] * y + Ans[2][2] * z) % 666013 << '\n';
}

int main(){
    short t;
    cin >> t;
    while(t--){
        solve();
    }
}