Cod sursa(job #3238395)

Utilizator RosheRadutu Robert Roshe Data 24 iulie 2024 23:36:52
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");


vector<vector<int> > matrixProduct(vector<vector<int> > &m1, vector<vector<int> > &m2){
  int rows = m1.size();
  int columns = m2[0].size();
  //cout << "The resulting matrix will have dimensions : " << "(" << rows << ", " << columns << ")" << "\n";
  vector<vector<int> > r(rows, vector<int>(columns, 0));
  for(int k = 0; k<columns; k++){
    for(int i = 0; i<rows; i++){
      for(int j = 0; j<m2.size(); j++){
        r[i][k] += (m1[i][j] * m2[j][k] % 666013); 
      }
      r[i][k] = r[i][k] % 666013;
    }
  }
 using namespace std;
 return r;
}

void solve(int X, int Y, int Z, int A, int B, int C, int N){
  vector<vector<int>> M = {
    {0, 1, 0},
    {0, 0, 1},
    {C, B, A}
  };  
  vector<vector<int>> I = {
  {X},
  {Y},
  {Z}
  };
  int P = N - 2;
  vector<vector<int>> result = {
    {1, 0, 0},
    {0, 1, 0},
    {0, 0, 1}
  };
  while(P > 0){
    if(P&1) result = matrixProduct(result, M);
    M = matrixProduct(M, M);
    P = P >> 1;
  }
  /*
  for(auto r : result){
    for(auto c : r){
      cout << c << " ";
    }
    cout << endl;
  }
  */
  result = matrixProduct(result, I);
  cout << result[2][0] << endl;
}

int main(){
  int T;
  in >> T;
  for(int i = 0; i<T; i++){
    int X, Y, Z, A, B, C, N;
    in >> X >> Y >> Z >> A >> B >> C >> N;
    solve(X, Y, Z, A, B, C, N);
  }
}