Cod sursa(job #1920507)

Utilizator raluca1234Tudor Raluca raluca1234 Data 10 martie 2017 02:24:31
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#include <cstring>

#define MOD 666013

using namespace std;

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

int I[3][3];
void lgput(int k){
    int ans[3][3]={{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
    while (k){
        if (k%2==1)
            matrixMultiplication(ans, I);
        matrixMultiplication(I, I);
        k=k/2;
    }
    memcpy(I, ans, sizeof(ans));
}

void solve(int X, int Y, int Z, int A, int B, int C, int N){
    I[0][0]=A; I[0][1]=1; I[0][2]=0;
    I[1][0]=B; I[1][1]=0; I[1][2]=1;
    I[2][0]=C; I[2][1]=0; I[2][2]=0;

    lgput(N-2);

    int m[3][3]={{Z, Y, X}, {0, 0, 0}, {0, 0, 0}};

    matrixMultiplication(m, I);

    printf("%d\n", m[0][0]);
}

int main(){
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    int T, X, Y, Z, A, B, C, N;
    scanf("%d", &T);
    while (T--){
        scanf("%d%d%d%d%d%d%d", &X, &Y, &Z, &A, &B, &C, &N);
        solve(X, Y, Z, A, B, C, N);
    }
    return 0;
}