Cod sursa(job #577327)

Utilizator petroMilut Petronela petro Data 10 aprilie 2011 01:38:39
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 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],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 M[5][5],long A[5][5])
{
	int i,j,k;
	long P[5][5],s=0;
	
	for(i=1;i<=3;++i)
		for(j=1;j<=3;++j)
		{
			s=0;
			for(k=1;k<=3;++k)
				s=(s+M[i][k]*A[k][j])%mod;
			P[i][j]=s;
		}
	
	for(i=1;i<=3;++i)
		for(j=1;j<=3;++j)
			M[i][j]=P[i][j];
}

void calcul(long n)
{
	if(n>1)
	{
		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;
}