Cod sursa(job #589834)

Utilizator swift90Ionut Bogdanescu swift90 Data 13 mai 2011 22:17:13
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>
const int R=666013;
long long nr[5],T[5][5],tn[5][5];
void el(long long x){
	int i,j,k;
	long long ax[5][5],a1[5][5];
	for(i=0;i<5;++i){
		tn[i][i]=1;
		for(j=0;j<5;++j){
			ax[i][j]=T[i][j];
			a1[i][j]=0;
		}
	}
	while(x){
		if(x&1){
			for(k=1;k<5;++k){
				for(i=1;i<5;++i){
					for(j=1;j<5;++j)
						a1[i][j]+=tn[i][k]*ax[k][j];
				}
			}
			for(i=1;i<5;++i){
				for(j=1;j<5;++j){
					tn[i][j]=a1[i][j]%R;
					a1[i][j]=0;
				}
			}
		}
		for(k=1;k<5;++k){
			for(i=1;i<5;++i){
				for(j=1;j<5;++j)
					a1[i][j]+=ax[i][k]*ax[k][j];
			}
		}
		for(i=1;i<5;++i){
			for(j=1;j<5;++j){
				ax[i][j]=a1[i][j]%R;
				a1[i][j]=0;
			}
		}
		x>>=1;
	}
}
long long calc(long long x){
	int i,j;
	long long ss=0;
	for(i=0;i<5;++i){
		for(j=0;j<5;++j)
			tn[i][j]=0;
	}
	el(x);
	for(i=1;i<5;++i)
		ss+=nr[i]*tn[i][4];
	return ss%R;
}
int main(){
	freopen("iepuri.in","r",stdin);
	freopen("iepuri.out","w",stdout);
	long long a,b,c,x,y,z,N,t;
	scanf("%lld",&t);
	for(;t;--t){
		scanf("%lld%lld%lld%lld%lld%lld%lld",&x,&y,&z,&a,&b,&c,&N);
		nr[1]=x;
		nr[2]=y;
		nr[3]=z;
		T[2][1]=T[3][2]=1;
		T[1][3]=T[1][4]=c;
		T[2][3]=T[2][4]=b;
		T[3][3]=T[3][4]=a;
		printf("%lld\n",calc(N-2));
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}