Cod sursa(job #2568179)

Utilizator smoc_georgemarianSmoc George-Marian smoc_georgemarian Data 3 martie 2020 21:16:05
Problema Iepuri Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <bits/stdc++.h>
#define NMAX 10
#define MOD 666013
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

struct tip{long long int a[NMAX][NMAX];  };
tip val;
tip rez;

long long int n;
long long int v[NMAX];
long long int fact[NMAX];
long long int t,i;
void init()
{
  int i;
  for(i=0;i<4;i++)
       memset(val.a[i],0,sizeof(val.a[i])   );
  val.a[1][1]=fact[1];
  val.a[1][2]=fact[2];
  val.a[1][3]=fact[3];
  val.a[2][1]=val.a[3][2]=1;
  for(i=0;i<4;i++)
       memset(rez.a[i],0,sizeof(rez.a[i])   );
  rez.a[1][1]=rez.a[2][2]=rez.a[3][3]=1;
}
void inm()
{ int i,j;

  tip ret;

  for(i=1;i<=3;i++)
      memset(ret.a[i],0, sizeof(ret.a[i]));

  for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            {
                for(int ct=1;ct<=3;ct++)
                      ret.a[i][j]=(ret.a[i][j]+ rez.a[i][ct]* val.a[ct][j])%MOD;
            }
  for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
               rez.a[i][j]=ret.a[i][j];
}

void inm1()
{
  int i,j;
  tip ret;

  for(i=1;i<=3;i++)
      memset(ret.a[i],0, sizeof(ret.a[i]));

  for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            {
                for(int ct=1;ct<=3;ct++)
                      ret.a[i][j]=(ret.a[i][j]+ val.a[i][ct]* val.a[ct][j])%MOD;
            }
  for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
                    val.a[i][j]=ret.a[i][j];

}
int main()
{fin>>t;
 while(t--)
    {
     fin>>v[1]>>v[2]>>v[3];
     fin>>fact[1]>>fact[2]>>fact[3];
     fin>>n;
     init();
     for(int j=0; (1<<j)<=n-2;j++)
        {
         if(  (1<<j) & (n-2) )
            {
             inm();
            }
          inm1();
        }
     long long int sum=0;

     for(i=1;i<=3;i++)
        {
         sum=(sum+   rez.a[1][i]* v[4-i])%MOD;

        }
      fout<<sum<<'\n';
    }
    return 0;
}