Cod sursa(job #1213411)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 28 iulie 2014 00:42:20
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<fstream>
using namespace std;
ifstream fi("iepuri.in");
ofstream fo("iepuri.out");

const int MODULO = 666013;

int T,X,Y,Z,A,B,C,n;

void produs(int a[5][5], int b[5][5], int c[5][5]){
     int r[5][5];
     int i,j,k;
     
     for(i=1;i<=3;i++)
       for(j=1;j<=3;j++)
         r[i][j]=0;
         
     for(i=1;i<=3;i++)
       for(j=1;j<=3;j++)
         for(k=1;k<=3;k++)
           r[i][j]=(r[i][j]+a[i][k]*b[k][j])%MODULO;
           
     for(i=1;i<=3;i++)
       for(j=1;j<=3;j++)
         c[i][j]=r[i][j];
}

void calcul(int X, int Y, int Z, int A, int B, int C, int n){
     int rez[5][5],aux[5][5];
     int sol;
     
     //matricea unitate rez
     rez[1][1]=1; rez[1][2]=0; rez[1][3]=0;
     rez[2][1]=0; rez[2][2]=1; rez[2][3]=0;
     rez[3][1]=0; rez[3][2]=0; rez[3][3]=1;
     
     //matricea pe care o vom ridica la puterea n
     aux[1][1]=0; aux[1][2]=0; aux[1][3]=C;
     aux[2][1]=1; aux[2][2]=0; aux[2][3]=B;
     aux[3][1]=0; aux[3][2]=1; aux[3][3]=A;
     
     while(n>0){
                if(n&1) produs(rez,aux,rez);
                produs(aux,aux,aux);
                n>>=1;
               }
   
     sol=(1LL*X*rez[1][1]+1LL*Y*rez[2][1]+1LL*Z*rez[3][1])%MODULO;
     fo<<sol<<"\n";
}

int main(){
    fi>>T;
    for(;T>0;T--)
       {
        fi>>X>>Y>>Z>>A>>B>>C>>n;
        calcul(X,Y,Z,A,B,C,n);
       }

    fi.close();
    fo.close();
    return 0;
}