Cod sursa(job #2655406)

Utilizator numecompletnume complet numecomplet Data 4 octombrie 2020 12:03:03
Problema Iepuri Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>
#define NMAX 5
#define MOD 666013
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
struct mat{long long int a[NMAX][NMAX];}inm,rez;
int t,i,j;
int x,y,z,a,b,c,n;
void build();
mat inmultire(mat a, mat b);
void afis(  mat a)
{
    int i,j;
    for(i=1;i<=3;i++)
        {for(j=1;j<=3;j++)
            fout<<a.a[i][j]<<" ";
       fout<<'\n';
        }
}
int main()
{fin>>t;
 while(t--)
        {
         fin>>x>>y>>z>>a>>b>>c>>n;
         build();
         for(i=0; (1<<i)<=n-2;i++)
              {
                if( (1<<i) & (n-2) )
                    {
                     rez=inmultire(rez, inm);
                    }
               inm=inmultire(inm, inm);
              }


         long long int r= (rez.a[1][1]*z+rez.a[1][2]*y+rez.a[1][3]*x)%MOD;
         fout<<r<<'\n';
        }
    return 0;
}
void build()
{
  int i,j;
  for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            inm.a[i][j]=rez.a[i][j]=0;


   rez.a[1][1]=rez.a[2][2]=rez.a[3][3]=1;

   inm.a[1][1]=a;
   inm.a[1][2]=b;
   inm.a[1][3]=c;
   inm.a[2][1]=1;
   inm.a[3][2]=1;
   //afis(inm);


}
mat inmultire( mat a, mat b)
{
  int i,j,k;
  mat aux;

  for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            {   long long int suma=0;
                for(k=1;k<=3;k++)
                {

                suma=(suma+a.a[i][k]*b.a[k][j])%MOD;
                }

             aux.a[i][j]=suma;
            }
return aux;
}