Cod sursa(job #2644757)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 25 august 2020 21:34:39
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>
#define int long long
#define mod 666013

using namespace std;

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

void multiply(int a[][3], int b[3][3], int N) {
  int c[N][3];
  for(int i = 0; i < N; ++i)
    for(int j = 0; j < 3; ++j) {
      int sum = 0;
      for(int k = 0; k < 3; ++k)
        sum = (sum + a[i][k] * b[k][j]) % mod;
      c[i][j] = sum;
    }
  for(int i = 0; i < N; ++i)
    for(int j = 0; j < 3; ++j)
      a[i][j] = c[i][j];
}

int32_t main () {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int T;
  fin >> T;
  while(T --) {
    int X, Y, Z, A, B, C, N;
    fin >> X >> Y >> Z >> A >> B >> C >> N;
    N -= 3;
    int init[1][3];
    init[0][0] = X, init[0][1] = Y, init[0][2] = Z;
    int mat[3][3];
    mat[0][0] = mat[0][1] = mat[1][1] = mat[2][0] = 0;
    mat[1][0] = mat[2][1] = 1;
    mat[0][2] = C;
    mat[1][2] = B;
    mat[2][2] = A;
    int val[3][3];
    for(int i = 0; i < 3; ++i)
      for(int j = 0; j < 3; ++j)
        val[i][j] = mat[i][j];
    while(N) {
      if(N & 1)
        multiply(mat, val, 3);
      multiply(val, val, 3);
      N >>= 1;
    }
    multiply(init, mat, 1);
    fout << init[0][2] << '\n';
  }
}