Cod sursa(job #2870388)

Utilizator alextmAlexandru Toma alextm Data 12 martie 2022 12:08:31
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>
using namespace std;
 
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

using ll = long long;
 
const int MAXN = 3;
const int MOD = 666013;
 
struct Matrix {
  ll a[MAXN + 1][MAXN + 1];
  Matrix() {
    memset(a, 0, sizeof(a));
  }
  
  Matrix operator *(const Matrix &other) const {
    Matrix sol;
    for(int i = 1; i <= MAXN; i++)
      for(int j = 1; j <= MAXN; j++)
        for(int k = 1; k <= MAXN; k++)
          sol.a[i][j] = (sol.a[i][j] + a[i][k] * other.a[k][j]) % MOD;
    return sol;
  }
 
};
 
Matrix pwr(Matrix a, int b) {
  Matrix sol = a;
  while(b) {
    if(b % 2 == 1)
      sol = sol * a;
    a = a * a;
    b /= 2;
  }
  return sol;
}
 
inline void solve () {
  int x, y, z, a, b, c, n;
  fin >> x >> y >> z >> a >> b >> c >> n;
  
  Matrix init;
  init.a[3][1] = x;
  init.a[3][2] = y;
  init.a[3][3] = z;
  
  Matrix M;
  M.a[1][3] = c;
  M.a[2][3] = b;
  M.a[3][3] = a;
  M.a[2][1] = M.a[3][2] = 1;
  init = init * pwr(M, n - 1);
  
  fout << init.a[3][1] << '\n';
}
 
int main() {
  int t;
  fin >> t;
  while(t--)
    solve ();
    
  return 0;
}