Cod sursa(job #1044024)

Utilizator iarbaCrestez Paul iarba Data 29 noiembrie 2013 10:27:58
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
using namespace std;
long cons=666013,a[3][3],b[3][3],m[3][3],c[3][3],x0,x1,x2,caz,t,n;
void exp()
{
	int i,j,k;
	for(i=0;i<=2;i++){for(j=0;j<=2;j++){for(k=0;k<=2;k++){
		c[i][j]=(c[i][j]+a[i][k]*b[k][j])%cons;
														 }
									   }
					 }
	for(i=0;i<=2;i++){for(j=0;j<=2;j++){a[i][j]=c[i][j];b[i][j]=c[i][j];c[i][j]=0;}}
	if(n%2){
	for(i=0;i<=2;i++){for(j=0;j<=2;j++){for(k=0;k<=2;k++){
		c[i][j]=(c[i][j]+m[i][k]*a[k][j])%cons;
														 }
									   }
					 }
	for(i=0;i<=2;i++){for(j=0;j<=2;j++){m[i][j]=c[i][j];c[i][j]=0;}}
		   }
	if(n/2){n/=2;exp();}
}
int main()
{
	freopen("iepuri.in","r",stdin);
	freopen("iepuri.out","w",stdout);
	scanf("%ld",&t);
	for(caz=1;caz<=t;caz++){
		a[0][0]=0;a[0][1]=1;a[0][2]=0;
		a[1][0]=0;a[1][1]=0;a[1][2]=1;
		scanf("%ld %ld %ld %ld %ld %ld %ld",&x0,&x1,&x2,&a[2][2],&a[2][1],&a[2][0],&n);
		m[0][0]=1;m[0][1]=0;m[0][2]=0;
		m[1][0]=0;m[1][1]=1;m[1][2]=0;
		m[2][0]=0;m[2][1]=0;m[2][2]=1;
		
		b[0][0]=1;b[0][1]=0;b[0][2]=0;
		b[1][0]=0;b[1][1]=1;b[1][2]=0;
		b[2][0]=0;b[2][1]=0;b[2][2]=1;
		
		c[0][0]=0;c[0][1]=0;c[0][2]=0;
		c[1][0]=0;c[1][1]=0;c[1][2]=0;
		c[2][0]=0;c[2][1]=0;c[2][2]=0;
		
		n-=2;exp();
		n=(m[2][0]*x0+m[2][1]*x1+m[2][2]*x2)%cons;
		printf("%ld\n",n);
						   }
return 0;
}