Cod sursa(job #577346)

Utilizator petroMilut Petronela petro Data 10 aprilie 2011 02:24:44
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 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,v[5];
long n;
long M[5][5],P[5][5],A[5][5];

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

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+=(Q[i][k]*R[k][j])%mod, s=s%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;
	for(int i=1;i<=3;++i)
		s+=(M[1][i]*v[i])%mod, s=s%mod;
	
	fprintf(G,"%ld\n",s);
}

int main()
{
	int i,t;
	fscanf(F,"%d",&t);
	A[2][1]=1;
	A[3][2]=1;
	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;
}