Cod sursa(job #2488973)

Utilizator ivddabDabelea Ioana-Viviana ivddab Data 7 noiembrie 2019 20:39:50
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#define MOD 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long x,y,z,A,B,C,n,i,j,l,m;
struct matrix{
  long long mat[5][5];
}k;
const matrix null={
  {{1,0,0},
   {0,1,0},
   {0,0,1}}
};
matrix inm(matrix a,matrix b){
  matrix rez;
  int s;
  for(i=0;i<3;i++){
    for(j=0;j<3;j++){
        s=0;
        for(l=0;l<3;l++){
            s=(s+(a.mat[i][l]*b.mat[l][j])%MOD)%MOD;
        }
        rez.mat[i][j]=s;
    }
  }
  return rez;
}
matrix pow(matrix a, int n ){
   if(n<=0) return null;
   if(n%2==1) return inm(a,pow(inm(a,a),n/2));
   return pow(inm(a,a),n/2);
}
int main()
{
    f>>n;
    while(n!=0){ n--;
        f>>x>>y>>z>>A>>B>>C>>m;
        for(i=0;i<3;i++)
         for(j=0;j<3;j++){
          if(j==0) {
              if(i==0)  k.mat[i][j]=A;
               else
              if(i==1)  k.mat[i][j]=B;
               else     k.mat[i][j]=C;
          }
            else
          if(j==i+1) k.mat[i][j]=1;
            else k.mat[i][j]=0;
         }
        if(m>3){
          k=pow(k,m-2);
          g<<((z*k.mat[0][0])%MOD+(y*k.mat[1][0])%MOD+(x*k.mat[2][0])%MOD)%MOD;
        } else
        if(m==1) g<<x;
          else
        if(m==2) g<<y;
          else
        if(m==3) g<<z;
        g<<'\n';
    }
    return 0;
}