Cod sursa(job #1183877)

Utilizator tudormaximTudor Maxim tudormaxim Data 10 mai 2014 14:05:09
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <cstdio>
#define cons 666013
using namespace std;
long long 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;
}