Cod sursa(job #569591)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 1 aprilie 2011 19:11:45
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
# include <fstream>
# define mod 666013
using namespace std;
ifstream f ("iepuri.in");
ofstream g ("iepuri.out");
long long int x0,x1,x2,a,b,c,n,t;

struct matrice
{
	long long int m[4][4];
}q,bb,w;


void initm ()
{
	int i,j;
	for (i=1;i<=3;i++)
		for (j=1;j<=3;j++)
			q.m[i][j]=0;
	q.m[1][1]=a;
	q.m[2][1]=b;
	q.m[3][1]=c;
	q.m[1][2]=1;
	q.m[2][3]=1;
}

  matrice prod (matrice a,matrice b)
  {
	  long long int i,j,x,k;
	  for (i=1;i<=3;i++)
		  for (j=1;j<=3;j++)
		  {
			  x=0;
			  for (k=1;k<=3;k++)
				{  
					x+=a.m[i][k]*b.m[k][j];
					x=x%mod;
			  }
			  w.m[i][j]=x%mod;
		  }
		  return w;
	  
  }


   matrice putere (long long int p,matrice a)
  {
	  if (p==1)
		  return a;
	  else
		  if (p%2==1)
			  return prod (a,putere(p-1,a));
		  else
		  {
			  bb=putere (p/2,a);
			  return prod (bb,bb);
		  }
  }



  long long int nr (long long int n)
  {
	  long long int x=0;
	  matrice mm=putere (n-2,q);
	  x=mm.m[1][1]*x2+mm.m[2][1]*x1+mm.m[3][1]*x0;
	  x=x%mod;
	  return x;
  }


int main ()
{
	int i;
	f>>t;
	
	for (i=1;i<=t;i++)
	{
		f>>x0>>x1>>x2>>a>>b>>c>>n;
		
	
		initm();
		g<<nr (n)<<"\n";
	}	
	return 0;
}