Cod sursa(job #2763044)

Utilizator ps2001Silviu Popescu ps2001 Data 11 iulie 2021 11:53:53
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

vector<vector<long long>> mat_mult(vector<vector<long long>> a, vector<vector<long long>> b)
{
    vector<vector<long long>> res{{0,0,0}, {0,0,0}, {0,0,0}};

    for (int i = 0; i < a.size(); i++) {
        for (int j = 0; j < a[i].size(); j++) {
            for (int k = 0; k < a[i].size(); k++)
                res[i][j] += a[i][k]*b[k][j];
        }
    }

    return res;
}

vector<vector<long long>> mat_mod(vector<vector<long long>> a)
{
    for (int i = 0; i < a.size(); i++)
        for (int j = 0; j < a[i].size(); j++)
            a[i][j] = a[i][j]%666013;

    return a;
}

vector<vector<long long>> mat_pow(vector<vector<long long>> a, int k)
{
    if (k == 0) return mat_mod({{1,0,0}, {0,1,0}, {0,0,1}});
    if (k%2==0) return mat_mod(mat_pow(mat_mod(mat_mult(a, a)), k/2));
    return mat_mod(mat_mult(a, mat_mod(mat_pow(mat_mod(mat_mult(a, a)), k/2))));
}

int main()
{
    ifstream fin("iepuri.in");
    ofstream fout("iepuri.out");

    int T, X, Y, Z, A, B, C, N;
    fin>>T;

    for(int k=0; k<T; k++) {
        fin>>X>>Y>>Z>>A>>B>>C>>N;

        vector<vector<long long>> a{{0, 0, C}, {1, 0, B}, {0, 1, A}};
        vector<vector<long long>> res;

        res = mat_pow(a, N - 2);

        fout<<((X*res[0][2]+Y*res[1][2]%666013)+Z*res[2][2])%666013<<'\n';
    }
    return 0;
}