Cod sursa(job #594597)

Utilizator rudarelLup Ionut rudarel Data 8 iunie 2011 15:12:38
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#include <string.h>
#define MOD 666013
int x[3];
int A, B, C, n;
void inmultire(int a[][3], int b[][3]){
    int c[3][3] = {0};
    int i, j, k;
    for(i = 0; i < 3; ++i)
        for(j = 0; j < 3; ++j)
            for(k = 0; k < 3; ++k)
                c[i][j] = (c[i][j] + ((long long)a[i][k] * b[k][j]%MOD)) % MOD;
    memcpy(a, c, sizeof(c));
}
void solve(){
    int a[3][3] = { {0,0,C}, {1, 0, B},{0, 1, A} };
    int sol[3][3]={ {1,0,0}, {0,1,0} , {0,0,1}};
    //sol[0][0] = sol[1][1] = sol[2][2] = 1;
    n -= 2;
    for(; n; (n >>=1) ){
        if(n & 1)
            inmultire(sol, a);
        inmultire(a, a);
    }
    int s = 0;
    for(int i = 0; i < 3; ++i)
        s = (s + (long long)sol[i][2]*x[i]%MOD)% MOD;
    printf("%d\n", s);
}
int main(){
    int t;
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    scanf("%d", &t);
    while(t){
        --t;
        scanf("%d%d%d %d%d%d%d", &x[0], &x[1], &x[2], &A, &B, &C, &n);
        solve();
    }
    return 0;
}