Cod sursa(job #91493)

Utilizator gigi_becaliGigi Becali gigi_becali Data 12 octombrie 2007 17:46:24
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include<stdio.h>
#include<string.h>
#define mod 666013
FILE *f=fopen("iepuri.in","r"), *g=fopen("iepuri.out","w");
int a[32][4][4];
int A,B,C,X,Y,Z,N,m,i,j,M[4][4],D[4][4],E[4][4],q,T;
bool bin[33];
void matrici(int p)
{
  for(int i=1;i<=3;i++)
    for(int j=1;j<=3;j++)
      {
	a[p][i][j]=0;
	  for(int k=1;k<=3;k++)
	    a[p][i][j]+=(((a[p-1][i][k]%666013)*(a[p-1][k][j]%666013))%666013);
      }
  
}		
void xmatrici(int p)
{
  int i,j;
  for(i=1;i<=3;i++)
    for( j=1;j<=3;j++)
      {
	D[i][j]=0;
	for(int k=1;k<=3;k++)
	  D[i][j]+=(((M[i][k]%666013)*(a[p][k][j]%666013))%666013);
      }
  for(i=1;i<=3;i++)
    for(j=1;j<=3;j++) M[i][j]=D[i][j];
}
void fmatrici()
{
  for(int i=1;i<=3;i++)
    for(int j=1;j<=1;j++)
      {
	D[i][j]=0;
	for(int k=1;k<=3;k++)
	  D[i][j]+=(((M[i][k]%666013)*(E[k][j]%666013))%666013);
      }
}
int main()
{
  fscanf(f,"%d", &T);
  for(i=1;i<=T;i++)
    {
      fscanf(f,"%d %d %d %d %d %d %d",&X,&Y,&Z,&A,&B,&C,&N);
      memset(a, 0, sizeof(a));
      memset(M, 0, sizeof(M));
      memset(E, 0, sizeof(E));
      a[0][1][2]=1;
      a[0][2][3]=1;
      a[0][3][1]=C;
      a[0][3][2]=B;
      a[0][3][3]=A;
      m=N;
      q=0;
      while(m)
	{
	  bin[q++]=m%2;
	  m/=2;
	  
	}
    
      M[1][1]=1;
      M[2][2]=1;
      M[3][3]=1;
      for(j=1;j<=q;++j) matrici(j);
     
      for(j=0;j<q;j++) 
	if(bin[j]) xmatrici(j);
      
      E[1][1]=X;
      E[2][1]=Y;
      E[3][1]=Z;
      
        fmatrici();
      int sum=0;
      //sum+=D[1][1]*X; sum%=mod;
      //sum+=D[1][2]*Y; sum%=mod;
      //sum+=D[1][3]*Z; sum%=mod;
      //printf("%d\n", sum);
      /*printf("%d\n", D[1][1]);
      
       for(int ii=1;ii<=3;++ii)
	 {
	   for(int jj=1;jj<=3;++jj)printf("%d ", D[ii][jj]);
	   printf("\n");
	 }
       printf("\n");
      */
            fprintf(g,"%d\n",D[1][1]);
    }	
  fclose(g);
  return 0;
}