Cod sursa(job #577343)

Utilizator petroMilut Petronela petro Data 10 aprilie 2011 02:17:05
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<stdio.h>
#define mod 666013
FILE *F=fopen("iepuri.in","r");
FILE *G=fopen("iepuri.out","w");

int a,b,c,x0,x1,x2;
long n;
long M[5][5],P[5][5],A[5][5];

void mat()
{
	int i,j;
	for(i=1;i<=3;++i)
		for(j=1;j<=3;++j)
			A[i][j]=M[i][j]=0;
		
	A[1][2]=A[2][3]=M[1][2]=M[2][3]=1;
	A[3][1]=M[3][1]=c;
	A[3][2]=M[3][2]=b;
	A[3][3]=M[3][3]=a;
}

void matrice(long Q[5][5],long R[5][5])
{
	int i,j,k;
	long s=0;
	
	for(i=1;i<=3;++i)
		for(j=1;j<=3;++j)
		{
			s=0;
			for(k=1;k<=3;++k)
				s=(s+Q[i][k]*R[k][j])%mod;
			P[i][j]=s;
		}
	
	for(i=1;i<=3;++i)
		for(j=1;j<=3;++j)
			Q[i][j]=P[i][j];
}

void calcul(long n)
{
	if(n<=1) return ;
	calcul(n/2);
	matrice(M,M);
	if(n&1) matrice(M,A);
}
void afis()
{
	long s=0;
	
	s=(M[3][1]*x0)%mod;
	s=(s+ (M[3][2]*x1)%mod) %mod;
	s=(s+ (M[3][3]*x2)%mod) %mod;
	
	fprintf(G,"%ld\n",s);
}

int main()
{
	int i,t;
	fscanf(F,"%d",&t);
	for(i=1;i<=t;++i)
	{
		fscanf(F,"%d%d%d%d%d%d%ld",&x0,&x1,&x2,&a,&b,&c,&n);
		mat();
		n=n-2;
		calcul(n);
		afis();
	}
	fclose(F);
	fclose(G);
	return 0;
}