Cod sursa(job #811440)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 12 noiembrie 2012 12:37:07
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream>
#include<string.h>
#define mod 666013
#define dim 5


using namespace std;

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

int unitate[dim][dim];
int sum , T,X[dim],a,b,c,n;
int A[dim][dim],temp[dim][dim],sol[dim][dim];
int i;

void multiply(int Pn[dim][dim],int P[dim][dim],int rez[dim][dim]){
	int i,j,k;
	for(i=1;i<=3;i++){
		for(j=1;j<=3;j++){
			rez[i][j]=0;
			for(k=1;k<=3;k++){
				rez[i][j]+=Pn[i][k]*P[k][j]%mod;
				if(rez[i][j]>=mod)
					rez[i][j]-=mod;
			}
		}
	}
}


int main(){
	
	f>>	T;
	unitate[1][1]=unitate[2][2]=unitate[3][3]=1;
	while(T--){
		f>>X[1]>>X[2]>>X[3]>>a>>b>>c>>n;
		
		A[1][1]=A[1][3]=A[2][1]=A[2][2]=0;
		A[1][2]=A[2][3]=1;
		A[3][1]=c;A[3][2]=b;A[3][3]=a;
		
		n-=2;
		
		memcpy(sol,unitate,sizeof(sol));
		
		while(n!=0){
			if(n%2){
				multiply(sol,A,temp);
				memcpy(sol,temp,sizeof(sol));
			}
			multiply(A,A,temp);
			memcpy(A,temp,sizeof(A));
			n/=2;
		}
		sum=0;
		for(i=1;i<=3;i++){
			sum+=(sol[3][i]*X[i])%mod;
			if(sum>=mod)
				sum-=mod;
		}
		g<<sum<<'\n';
	}
	
	
	return 0;
}