Cod sursa(job #987369)

Utilizator smaraldaSmaranda Dinu smaralda Data 20 august 2013 15:33:07
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<stdio.h>
#include<string.h>
#define MOD 666013
int a,b,c,x,y,z;

class Matrix {
    public:
    int m[5][5];
    Matrix () {
        memset(m,0,sizeof(m));
        m[1][2]=m[2][3]=1;
        m[3][1]=c;
        m[3][2]=b;
        m[3][3]=a;
        }

    Matrix (int val){
        memset(m,0,sizeof(m));
        }

    Matrix operator * (Matrix other) {
        int i,j,k;
        Matrix res(0);
        for(i = 1 ; i < 4 ;i++)
            for(j = 1 ; j < 4 ;j++)
                for(k = 1 ; k < 4 ; k++)
                    res.m[i][j] = (res.m[i][j] + (m[i][k] * other.m[k][j]) % MOD) % MOD;
        return res;
        }
    };

Matrix lgPow (Matrix a, int p) {
    if(p == 1) return a;
    if(p & 1)
        return a * lgPow(a,p-1);
    Matrix jum;
    jum=lgPow(a,p / 2);
    return jum * jum;
}

int main () {
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    int n,tc;
    scanf("%d",&tc);
    while(tc) {
        scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
        Matrix M;
        M = lgPow(M,n-2);
        printf("%d\n",x * M.m[3][1] + y * M.m[3][2] + z * M.m[3][3]);
        tc--;
        }
    return 0;
}