Cod sursa(job #2121220)

Utilizator giotoPopescu Ioan gioto Data 3 februarie 2018 14:28:08
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <cstring>
using namespace std;

int x, y, z, a, b, c, n, t;
int d[4][4], S[4][4];
const int MOD = 666013;
inline void inm(int A[][4], int B[][4], int C[][4]){
    for(int i = 0; i < 3 ; ++i)
        for(int j = 0; j < 3 ; ++j)
            for(int k = 0; k < 3 ; ++k)
                C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j]) % MOD;
}
inline void lg(int n){
    int aux[4][4];
    for(int i = 0; (1LL * 1 << i) <= n ; ++i){
        if((n & (1 << i))){
            memset(aux, 0, sizeof(aux));
            inm(S, d, aux);
            memcpy(S, aux, sizeof(aux));
        }
        memset(aux, 0, sizeof(aux));
        inm(d, d, aux);
        memcpy(d, aux, sizeof(aux));
    }
}
int main()
{
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    scanf("%d", &t);
    while(t--){
        scanf("%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &n);
        d[0][0] = 0; d[0][1] = 0; d[0][2] = c;
        d[1][0] = 1; d[1][1] = 0; d[1][2] = b;
        d[2][0] = 0; d[2][1] = 1; d[2][2] = a;
        S[0][0] = x; S[0][1] = y; S[0][2] = z;
        lg(n - 2);
        printf("%d\n", S[0][2]);
    }
    return 0;
}