Cod sursa(job #1255966)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 5 noiembrie 2014 17:24:09
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<cstdio>
const int MOD=666013;
class Array{
    public:
        long long a[4][4];
        int n,m;
        Array(){
        }
        Array(int aa,int bb,int cc){
            a[1][1]=aa;
            a[2][1]=bb;
            a[3][1]=cc;
            n=3;
            m=1;
        }
        Array(int a11,int a12,int a13,int a21,int a22,int a23,int a31,int a32,int a33){
            a[1][1]=a11;
            a[1][2]=a12;
            a[1][3]=a13;
            a[2][1]=a21;
            a[2][2]=a22;
            a[2][3]=a23;
            a[3][1]=a31;
            a[3][2]=a32;
            a[3][3]=a33;
            n=3;
            m=3;
        }
        Array operator*(const Array&ar)const{
            Array ax;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=ar.m;j++){
                    int nr=0;
                    for(int i1=1;i1<=m;i1++)
                        nr+=(a[i][i1]*ar.a[i1][j])%MOD;
                    ax.a[i][j]=nr%MOD;
                }
            ax.n=n;
            ax.m=ar.m;
            return ax;
        }
};
Array first,a;
Array power(Array a,int b){
    Array nr;
    if(b==1)
        return a;
    if(b%2==0){
        nr=power(a,b/2);
        return nr*nr;
    }
    return power(a,b-1)*a;
}
int t,x,y,z,aa,b,c,n;
int main(){
    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,&y,&z,&aa,&b,&c,&n);
        a=Array(aa,b,c,1,0,0,0,1,0);
        a=power(a,n-2);
        first=Array(z,y,x);
        printf("%lld\n",(a*first).a[1][1]);
    }
    return 0;
}