Cod sursa(job #1124926)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 26 februarie 2014 14:28:58
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<fstream>
#define mod 666013
using namespace std;
long long  x,y,z,a,b,c,n,m[5][5],t,p[5][5];
ifstream in("iepuri.in"); ofstream out("iepuri.out");
void inmult(long long C[5][5], long long B[5][5], long long A[5][5]){ //c=a*b
    long long aux[5][5];
    for(int i=1;i<=3;++i) for(int j=1;j<=3;++j) aux[i][j]=0;
    for(int i=1;i<=3;++i)
        for(int j=1;j<=3;++j)
            for(int k=1;k<=3;++k){
                aux[i][j]+=((A[i][k]%mod)*(B[k][j]%mod))%mod;
                aux[i][j]=aux[i][j]%mod;
            }
    for(int i=1;i<=3;++i) for(int j=1;j<=3;++j) C[i][j]=aux[i][j];
}
void lgput(){
    p[1][1]=1; p[1][2]=0; p[1][3]=0;
    p[2][1]=0; p[2][2]=1; p[2][3]=0;
    p[3][1]=0; p[3][2]=0; p[3][3]=1;
    while(n){
        if(n%2==1)inmult(p,p,m);
        inmult(m,m,m);
        n/=2;
    }
}
int main(){
    in>>t;
    for(;t;--t){
        in>>x>>y>>z>>a>>b>>c>>n;
        m[1][1]=0; m[1][2]=1; m[1][3]=0;
        m[2][1]=0; m[2][2]=0; m[2][3]=1;
        m[3][1]=c; m[3][2]=b; m[3][3]=a;
        lgput();
        out<<((p[1][1]*x)%mod+(p[1][2]*y)%mod+(p[1][3]*z)%mod)%mod<<'\n';
    }
}