Cod sursa(job #2647735)

Utilizator PatrickCplusplusPatrick Kristian Ondreovici PatrickCplusplus Data 6 septembrie 2020 00:27:49
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <bits/stdc++.h>

using namespace std;

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

const int mod = 666013;
int t, x, y, z, a, b, c, k;
vector <vector <int> > zz = {{1, 1}, {1, 0}};

vector <vector <int> > inmulteste(vector <vector <int> > a, vector <vector <int> > b){
    vector <vector <int> > ans(a.size());
    for (int i = 0; i < ans.size(); ++i){
        ans[i].resize(b[0].size());
    }
    for (int i = 0; i < a.size(); ++i){
        for (int j = 0; j < b[0].size(); ++j){
            for (int k = 0; k < a.size(); ++k){
                ans[i][j] = (1LL * ans[i][j] + (1LL * a[i][k] * b[k][j]) % mod) % mod;
            }
        }
    }
    return ans;
}

vector <vector <int> > log2pow(int n){
    if (n == 1){
        return zz;
    }
    vector <vector <int> > l = log2pow(n / 2);
    if (n & 1){
        return inmulteste(zz, inmulteste(l, l));
    }
    return inmulteste(l, l);
}

int main(){
    fin >> t;
    while (t--){
        fin >> x >> y >> z >> a >> b >> c >> k;
        if (k == 0){
            fout << x << "\n";
            continue;
        }
        if (k == 1){
            fout << y << "\n";
            continue;
        }
        if (k == 2){
            fout << z << "\n";
            continue;
        }
        zz = {{a, b, c}, {1, 0, 0}, {0, 1, 0}};
        vector <vector <int> > ans = log2pow(k - 2);
        ans = inmulteste(ans, {{z}, {y}, {x}});
        fout << ans[0][0] << "\n";
    }
    fin.close();
    fout.close();
    return 0;
}