Cod sursa(job #2171202)

Utilizator B_RazvanBaboiu Razvan B_Razvan Data 15 martie 2018 11:32:37
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <cstdio>
#define MOD 666013

using namespace std;

int T, N, x, y, z, a, b, c;

void read() {
    scanf("%d %d %d", &x, &y, &z);
    scanf("%d %d %d", &a, &b, &c);
    scanf("%d", &N);
}

void inmultireMatrice(int mat1[][3], int mat2[][3], int ans[][3]) {
    int a[3][3], b[3][3];
    for(int i = 0; i < 3; ++i) {
        for(int j = 0; j < 3; ++j) {
            a[i][j] = mat1[i][j];
            b[i][j] = mat2[i][j];
        }
    }
    for(int i = 0; i < 3; ++i) {
        for(int j = 0; j < 3; ++j) {
            ans[i][j] = 0;
            for(int k = 0; k < 3; ++k) {
                ans[i][j] += (1LL * a[i][k] * b[k][j]) % MOD;
                ans[i][j] %= MOD;
            }
        }
    }
}

int main()
{
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    scanf("%d", &T);
    while(T--) {
        read();
        int sol[3][3] = {{x, y, z}, {0, 0, 0}, {0, 0, 0}};
        int mat[3][3] = {{0, 0, c}, {1, 0, b}, {0, 1, a}};
        N -= 2;
        do {
            if(N % 2) {
                inmultireMatrice(sol, mat, sol);
            }
            inmultireMatrice(mat, mat, mat);
            N /= 2;
        }while(N);
        printf("%d\n", sol[0][2]);
    }
    return 0;
}