Cod sursa(job #3330074)

Utilizator RaduCalisovCalisovRadu RaduCalisov Data 17 decembrie 2025 13:35:52
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>
using namespace std;

long long mod = 666013;

vector<vector<long long>> mult(vector<vector<long long>> x,vector<vector<long long>> y){
    vector<vector<long long>> c(4,vector<long long>(4));
    
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            long long A = (x[i][1] * y[1][j]) % mod;
            long long B = (x[i][2] * y[2][j]) % mod;
            long long C = (x[i][3] * y[3][j]) % mod;

            c[i][j] = (A + B) % mod;
            c[i][j] = (c[i][j] + C) % mod;
        }
    }

    return c;
}

vector<vector<long long>> exp(vector<vector<long long>> x,int n){
    vector<vector<long long>> p(4,vector<long long>(4,0));
    p[1][1] = p[2][2] = p[3][3] = 1;

    while(n){
        if(n % 2 == 1)
            p = mult(p,x);
        x = mult(x,x);
        n/=2;
    }

    return p;
}

int main() {
    ifstream cin("iepuri.in");
    ofstream cout("iepuri.out");

	int tests;
    cin>>tests;

    while(tests--){
        int x,y,z,a,b,c,n;
        cin>>x>>y>>z>>a>>b>>c>>n;

        vector<vector<long long>> A(4,vector<long long>(4,0));
        vector<vector<long long>> res(4,vector<long long>(4,0));

        A[1][1] = a;
        A[2][1] = b;
        A[3][1] = c;
        A[1][2] = 1;
        A[2][3] = 1;

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

        A = exp(A,n-2);
        res = mult(res,A);

        cout<<res[1][1]<<"\n";
    }
}