Cod sursa(job #2218361)

Utilizator lucametehauDart Monkey lucametehau Data 4 iulie 2018 12:33:11
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>

using namespace std;

ifstream cin ("joc17.in");
ofstream cout ("joc17.out");

const int MOD = 666013;

int t, x, y, z, a, b, c, n;

int mat[4][4], sol[4][4], tmp[4][4];

void mult_mat(int a[][4], int b[][4], int c[][4]) {
  for(int i = 1; i <= 3; i++) {
    for(int j = 1; j <= 3; j++)
      c[i][j] = 0;
  }
  for(int i = 1; i <= 3; i++) {
    for(int j = 1; j <= 3; j++) {
      for(int k = 1; k <= 3; k++)
        c[i][j] = (c[i][j] + 1LL * a[i][k] * b[k][j]) % MOD;
    }
  }
  for(int i = 1; i <= 3; i++) {
    for(int j = 1; j <= 3; j++)
      a[i][j] = c[i][j];
  }
}

void lgput(int v[][4], int p) {
  for(int i = 0; (1 << i) <= p; i++) {
    if((1 << i) & p)
      mult_mat(sol, v, tmp);
    mult_mat(v, v, tmp);
  }
}

int main() {
  cin >> t;
  for(; t; t--) {
    cin >> x >> y >> z >> a >> b >> c >> n;
    mat[1][1] = mat[1][2] = mat[2][2] = mat[3][1] = 0;
    mat[2][1] = mat[3][2] = 1;
    mat[1][3] = c;
    mat[2][3] = b;
    mat[3][3] = a;
    for(int i = 1; i <= 3; i++) {
      for(int j = 1; j <= 3; j++)
        sol[i][j] = mat[i][j];
    }
    lgput(mat, n - 3);
    cout << (1LL * sol[1][3] * x + 1LL * sol[2][3] * y + 1LL * sol[3][3] * z) % MOD << "\n";
  }
  return 0;
}