Cod sursa(job #2120135)

Utilizator SenibelanMales Sebastian Senibelan Data 1 februarie 2018 22:37:54
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>

using namespace std;

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

const int MOD = 666013;
int Q;
int X, Y, Z, A, B, C, N;

void CopyMatrix(int c[3][3], int a[3][3]){
  for(int i = 0; i < 3; ++i)
      for(int j = 0; j < 3; ++j)
          a[i][j] = c[i][j];
}

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

void Power(int matrix[3][3], int p){
    int sol[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
    while(p){
        if(p % 2)
            Multiply(sol, matrix);
        Multiply(matrix, matrix);
        p /= 2;
    }
    CopyMatrix(sol, matrix);
}

int main(){
    in >> Q;
    for(int i = 1; i <= Q; ++i){
        in >> X >> Y >> Z >> A >> B >> C >> N;
        int matrix[3][3] = {{0, 0, C}, {1, 0, B}, {0, 1, A}};
        int input[3][3] = {{X, Y, Z}, {0, 0, 0}, {0, 0, 0}};
        Power(matrix, N - 2);
        Multiply(input, matrix);
        out << input[0][2] << "\n";
    } 
    return 0;
}