Cod sursa(job #131793)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 4 februarie 2008 14:50:01
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream.h>   
ofstream fout("iepuri.out");   
ifstream fin("iepuri.in");   
long long n,x,p,b[3][3],a[3][3],c[3][3];   
  
void egal(long long a[3][3],long long b[3][3]){   
  for (int i=0;i<3;i++)   
     for (int j=0;j<3;j++)   
     b[i][j]=a[i][j]%p;   
}   
  
void form(long long e[3][3],long long d[3][3]){   
memset(c,0,sizeof(c));   
for (int i=0;i<3;i++)   
for (int j=0;j<3;j++)   
   for (int k=0;k<3;k++)   
   c[i][j]+=(d[i][k]*e[k][j])%p;   
  
}   
  
void afisare(long long n){   
if (n==1)     {   
   egal(a,b);   
   return ;}   
if (n%2==0){   
   afisare(n/2);   
   form(b,b);   
   egal(c,b);}   
else{   
afisare(n-1);   
form(a,b);   
egal(c,b);}   
  
}   
  
void citire(){   
a[0][1]=1;        
a[1][2]=1;    
fin>>n;  
long long a1,a2,a3,A,B,C,XX;
p=666013;
for (long long i=0;i<n;i++){
   fin>>a1>>a2>>a3>>A>>B>>C>>XX;
   a[2][0]=A;
   a[2][1]=B;
   a[2][2]=C;
   b[0][0]=1;
   b[1][1]=1;
   b[2][2]=1;
   afisare(XX-2);
   fout<<(b[2][0]*a1+b[2][1]*a2+b[2][2]*a3)%p<<"\n";   
   memset(b,0,sizeof(b));   
   memset(c,0,sizeof(c));   
}   
fin.close();   
fout.close();   
}   
  
int main(){   
citire();   
return 0;   
}