Cod sursa(job #3176460)

Utilizator davidgeo123Georgescu David davidgeo123 Data 27 noiembrie 2023 09:49:35
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

const int MOD=666013;

#define int long long

vector<vector<int>> mul(vector<vector<int>> A, vector<vector<int>> B)
{
    vector<vector<int>> ans(A.size(), vector<int>(B[0].size(),  0));
    for(int i=0; i<ans.size(); i++)
        for(int j=0; j<ans[i].size(); j++)
            for(int k=0; k<B.size(); k++)
                ans[i][j]=(ans[i][j]+A[i][k]*B[k][j])%MOD;
    return ans;
}

vector<vector<int>> IDN(3, vector<int>(3, 0));

vector<vector<int>> matpow(vector<vector<int>> A, int exp)
{
    vector<vector<int>> rez=IDN;
    while(exp)
    {
        if(exp&1)
            rez=mul(rez, A);
        A=mul(A, A);
        exp>>=1;
    }
    return rez;
}
signed main()
{
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    IDN[0][0]=IDN[1][1]=IDN[2][2]=1;
    int tc;
    cin>>tc;
    while(tc--)
    {
        int a, b, c, st1, st2, st3, k;
        cin>>a>>b>>c>>st1>>st2>>st3>>k;
        vector<vector<int>> T(3, vector<int>(3, 0));
        T[0][0]=a;
        T[0][1]=b;
        T[0][2]=c;
        T[1][0]=T[2][1]=1;
        T=matpow(T, k);
        vector<vector<int>> ST(3, vector<int>(1, 0));
        ST[0][0]=st1;
        ST[1][0]=st2;
        ST[2][0]=st3;
        ST=mul(T, ST);
        cout<<ST[2][0]<<'\n';
    }
    return 0;
}