Cod sursa(job #1805457)

Utilizator raluca1234Tudor Raluca raluca1234 Data 13 noiembrie 2016 21:08:38
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include <cstring>
#define MOD 666013
#define MAX_N 2
#define MAX_M 4
#define MAX_P 4
using namespace std;

long long mat[MAX_M][MAX_P];
int x, y, z;

void matrixMultiplication(long long a[MAX_N][MAX_M], long long b[MAX_M][MAX_P]){
    long long c[MAX_N][MAX_P], i, j, k;
    for (i=0; i<MAX_N; i++)
        for (j=0; j<MAX_P; j++){
            c[i][j]=0;
            for (k=0; k<MAX_M; k++)
                c[i][j]=(c[i][j] + 1LL*a[i][k]*b[k][j]) % MOD;
        }
    memcpy(a, c, sizeof(c));
}

void lgput(long long n){
    long long ans[MAX_N][MAX_M];
    ans[0][0]=z;
    ans[0][1]=y;
    ans[0][2]=x;
    while (n){
        if (n&1)
            matrixMultiplication(ans, mat);
        matrixMultiplication(mat, mat);
        n=n>>1;
    }
    printf("%lld\n", ans[0][0]);
}

int main(){
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    int t, q, a, b, c, k;
    scanf("%d", &t);
    for (q=1; q<=t; q++){
        scanf("%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &k);
        mat[0][0]=a; mat[0][1]=1; mat[0][2]=0;
        mat[1][0]=b; mat[1][1]=0; mat[1][2]=1;
        mat[2][0]=c; mat[2][1]=0; mat[2][2]=0;
        lgput(k-2);
    }
    return 0;
}