Cod sursa(job #1183872)

Utilizator tudormaximTudor Maxim tudormaxim Data 10 mai 2014 14:00:28
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>
#define MOD 666013
using namespace std;
long a[3][3],b[3][3],m[3][3],c[3][3],x0,x1,x2,t,n;
void f()
{
	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])%MOD;
            }
        }
    }
	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])%MOD;
                }
            }
        }
	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=n/2;f();}
}
int main()
{
    ifstream in("iepuri.in");
    ofstream out("iepuri.out");
	in>>t;
	while(t)
    {
		a[0][0]=0;a[0][1]=1;a[0][2]=0;
		a[1][0]=0;a[1][1]=0;a[1][2]=1;
		in>>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=n-2;
		f();
		n=(m[2][0]*x0+m[2][1]*x1+m[2][2]*x2)%MOD;
		out<<n<<"\n";
		t--;
	}
return 0;
}