Cod sursa(job #810173)

Utilizator Robert29FMI Tilica Robert Robert29 Data 9 noiembrie 2012 19:46:45
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<stdio.h>
FILE*f=fopen("iepuri.in","r");
FILE*g=fopen("iepuri.out","w");
int t,n,A,B,C,x,y,z;
long long a[4][4],p[4][4],X[4][4];
void mult(long long a[][4],long long b[][4],long long c[][4])
{
	a[1][1]=b[1][1]*c[1][1]+b[1][2]*c[2][1]+b[1][3]*c[3][1];
	a[1][2]=b[1][1]*c[1][2]+b[1][2]*c[2][2]+b[1][3]*c[3][2];
	a[1][3]=b[1][1]*c[1][3]+b[1][2]*c[2][3]+b[1][3]*c[3][3];
	a[2][1]=b[2][1]*c[1][1]+b[2][2]*c[2][1]+b[2][3]*c[3][1];
	a[2][2]=b[2][1]*c[1][2]+b[2][2]*c[2][2]+b[2][3]*c[3][2];
	a[2][3]=b[2][1]*c[1][3]+b[2][2]*c[2][3]+b[2][3]*c[3][3];
	a[3][1]=b[3][1]*c[1][1]+b[3][2]*c[2][1]+b[3][3]*c[3][1];
	a[3][2]=b[3][1]*c[1][2]+b[3][2]*c[2][2]+b[3][3]*c[3][2];
	a[3][3]=b[3][1]*c[1][3]+b[3][2]*c[2][3]+b[3][3]*c[3][3];
	for(int i=1;i<=3;++i)
		for(int j=1;j<=3;++j)
			b[i][j]=a[i][j]%666013;
}
void put(int n)
{
	for(int i=1;i<=3;++i)
		for(int j=1;j<=3;++j)
			p[i][j]=X[i][j]=0;
	p[1][1]=p[2][2]=p[3][3]=1;
	X[1][2]=X[2][3]=1;
	X[3][1]=C;
	X[3][2]=B;
	X[3][3]=A;
	while(n!=0){
		if(n%2==1)
			mult(a,p,X);
		mult(a,X,X);
		n/=2;
	}
}
int main()
{
	fscanf(f,"%d",&t);
	for(int o=1;o<=t;++o)
	{
		fscanf(f,"%d%d%d%d%d%d%d",&x,&y,&z,&A,&B,&C,&n);
		put(n-2);
		fprintf(g,"%d\n",(p[3][1]*x+p[3][2]*y+p[3][3]*z)%666013);
		
	}
	
	fclose(f);
	fclose(g);
	return 0;
}