Cod sursa(job #347181)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 11 septembrie 2009 12:58:44
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
#define mod 666013
int x,y,z,a,b,c,n;

void inm(int a[4][4], int b[4][4])
{
	int c[4][4],i,j,k,s;
	for(i=1;i<=3;i++)
		for(j=1;j<=3;j++)
		{
			s=0;
			for(k=1;k<=3;k++)
				s=(s+(long long)a[i][k]*b[k][j])%mod;
			c[i][j]=s;
		}
	for(i=1;i<=3;i++)
		for(j=1;j<=3;j++)
			a[i][j]=c[i][j];
}

int rez()
{
	int v[4][4],v1[4][4]={0};
	long long s=0;
	v[1][1]=v[3][1]=v[1][2]=v[2][2]=0;
	v[2][1]=v[3][2]=1;
	v[1][3]=c;
	v[2][3]=b;
	v[3][3]=a;
	v1[1][1]=v1[2][2]=v1[3][3]=1;
	n-=2;
	while(n)
	{
		if(n&1)
			inm(v1,v);
		inm(v,v);
		n=n/2;
	}
	s=((long long)x*v1[1][3])%mod;
	s=s+((long long)y*v1[2][3])%mod;
	s=s+((long long)z*v1[3][3])%mod;
	return (int)s%mod;
}

int main()
{
	freopen("iepuri.in","r",stdin);
	freopen("iepuri.out","w",stdout);
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
		printf("%d\n",rez());
	}
	return 0;
}