Cod sursa(job #472316)

Utilizator andunhillMacarescu Sebastian andunhill Data 23 iulie 2010 18:56:33
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream>
using namespace std;
#define m 666013
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int a,b,c,x,y,z,T;
long long n,k;
long long ct[4][4],rez[4][4];
void prod(long long a[][4] , long long b[][4])
{	long long aux[4][4];
	int i,j,t;
	for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) aux[i][j]=0;
	for(i=1;i<=3;i++)
		for(j=1;j<=3;j++)
			for(t=1;t<=3;t++)
				aux[i][j]=( aux[i][j]%m + (b[t][j] * a[i][t])%m)%m;
	for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) rez[i][j]=aux[i][j];
}

long long pow(long long k)
{	if(k==1)
		for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) rez[i][j]=ct[i][j];
	else
		if(k%2)
		{	pow(k-1);
			prod(ct,rez);
		}
		else
		{	pow(k/2);
			prod(rez,rez);
		}
}


int main()
{	f>>T;
	for(int i=1;i<=T;i++)
	{	f>>x>>y>>z>>a>>b>>c>>n;
		ct[1][1]=ct[1][3]=ct[2][1]=ct[2][2]=0; ct[1][2]=ct[2][3]=1; ct[3][1]=c; ct[3][2]=b; ct[3][3]=a;
		pow(n);
		g<<((rez[1][1]*x)%m+(rez[1][2]*y)%m+(rez[1][3]*z)%m)%m<<'\n';
	}
	f.close();
	g.close();
	return 0;
}