Cod sursa(job #495551)

Utilizator cont_de_testeCont Teste cont_de_teste Data 25 octombrie 2010 19:53:06
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

using namespace std;

ifstream in("iepuri.in");
ofstream out("iepuri.out");

const int r=666013;
int n,N,x1,x2,x3,a,b,c,X[4][4],rez[4][4];

void inmultire(int A[4][4],int B[4][4]){
	int i,j,k,C[4][4];
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			C[i][j] = 0;
			for(k=0;k<3;k++){
				C[i][j] = (C[i][j] + (long long)A[i][k]*B[k][j]%r)%r;
			}
		}
	}
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			A[i][j]=C[i][j];
		}
	}
}

void prelucrare(){
	int i,j;
	n=n-2;
	X[0][0]=a;
	X[0][1]=b;
	X[0][2]=c;
	X[1][0]=1;
	X[1][1]=0;
	X[1][2]=0;
	X[2][0]=0;
	X[2][1]=1;
	X[2][2]=0;
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			if(i==j){
				rez[i][j]=1;
			}
			else{
				rez[i][j]=0;
			}
		}
	}
	while(n!=0){
        if(n%2!=0){
            inmultire(rez,X);
        }
        inmultire(X,X);
        n=n/2;
    }
	out<<((long long)rez[0][0]*x3%r+(long long)rez[0][1]*x2%r+(long long)rez[0][2]*x1%r)%r<<" ";
}

int main(){
	int i;
	in>>N;
	for(i=1;i<=N;i++){
		in>>x1>>x2>>x3>>a>>b>>c>>n;
		prelucrare();
	}
	return 0;
}