Cod sursa(job #191051)

Utilizator MciprianMMciprianM MciprianM Data 25 mai 2008 02:33:12
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include<fstream.h>
//using namespace std;
int a[200][9][9];/*
a[i]  matricea a[1] la puterea 2^i
deci a un sir de matrici 1,m,m^2, ...,m^32
*/
int T,X,Y,Z,A,B,C,N;
ofstream g("iepuri.out");
void raspuns(int d[][3]){
  int r=d[0][0]*Z+d[0][1]*Y+d[0][2]*X;
  g<<r<<'\n';
}
void inm(int m1[3][3],int m2[3][3], int m3[3][3]){
  int i, j, k,s;
  for(i=0;i<3;i++)
    for(j=0;j<3;j++){
      s=0;
      for(k=0;k<3;k++)
	s+=m1[i][k]*m2[k][j];
      m3[i][j]=s;
    }
}
void constr(){
  int i;
  for(i=1;(1<<i)<=N;i++)
    inm(a[i-1],a[i-1],a[i]);
}
void initi(int d[][3]){
  d[0][0]=1;
  d[0][1]=0;
  d[0][2]=0;

  d[1][0]=0;
  d[1][1]=1;
  d[1][2]=0;

  d[2][0]=0;
  d[2][1]=0;
  d[2][2]=1;


}
void copy(int d[][3],int e[][3]){
  int i, j;
  for(i=0;i<3;i++)
	   for(j=0;j<3;j++)
		   d[i][j]=e[i][j];

}

void final(){
  int cont=0;
  N-=2;
  int d[3][3],e[3][3];
  initi(d);
  while(N){
    if(N&1){

       inm(d,a[cont],e);
	   copy(d,e);
    }
    N>>=1;
    cont++;
  }
  raspuns(d);
}
void init(){
  a[0][0][0]=A;
  a[0][0][1]=B;
  a[0][0][2]=C;

  a[0][1][0]=1;
  a[0][1][1]=0;
  a[0][1][2]=0;

  a[0][2][0]=0;
  a[0][2][1]=1;
  a[0][2][2]=0;
}

int main(){
  int k;
  ifstream fisier("iepuri.in");
  fisier>>T;
  for(k=0;k<T;k++){
    fisier>>X>>Y>>Z>>A>>B>>C>>N;
    init();
    constr();
    if(N==0)
      g<<A<<'\n';
    else if(N==1)
	   g<<B<<'\n';
    else if(N==2)
	 g<<C<<'\n';
	 else final();
  }
  g.close();
  return 0;
}