Cod sursa(job #2953376)

Utilizator Luca529Taschina Luca Luca529 Data 11 decembrie 2022 11:20:49
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
long long int y[4][4], Mat[4], MOD=666013, x[4][4];

void Inm(long long int w[4][4])
{long long int z[4][4];
 for(int i=1;i<=3;i++)
 for(int j=1;j<=3;j++)
 z[i][j]=0;

 for(int i=1;i<=3;i++)
 for(int j=1;j<=3;j++)
 for(int k=1;k<=3;k++)
 {z[i][j]+=(y[i][k]*w[k][j])%MOD;
  z[i][j]%=MOD;
 }
 for(int i=1;i<=3;i++)
 for(int j=1;j<=3;j++)
 y[i][j]=z[i][j];
}

void DQ(int n)
{if(n==1)
 {for(int i=1;i<=3;i++)
  for(int j=1;j<=3;j++)
  y[i][j]=x[i][j];
 }
 else
 {DQ(n/2);
  Inm(y);

  if(n%2==1)Inm(x);
 }
}

int main()
{   long long int T, X, Y, Z, A, B, C, n;
    fin>>T;
    for(int i=1;i<=T;i++)
    {fin>>X>>Y>>Z>>A>>B>>C>>n;
     for(int i=1;i<=3;i++)
     for(int j=1;j<=3;j++)
     y[i][j]=0;

     x[1][2]=x[2][3]=1;
     x[3][1]=C, x[3][2]=B, x[3][3]=A;
     Mat[1]=X, Mat[2]=Y, Mat[3]=Z;

     DQ(n-2);

     Mat[3]=((y[3][1]*Mat[1])%MOD)+((y[3][2]*Mat[2])%MOD)+((y[3][3]*Mat[3])%MOD);
     fout<<Mat[3]%MOD<<"\n";
    }

    return 0;
}