Cod sursa(job #2240728)

Utilizator cory1211Corina cory1211 Data 13 septembrie 2018 21:54:35
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
#define ll long long
#define mod 666013
#define KMAX 3
using namespace std;

ifstream f("iepuri.in");
ofstream g("iepuri.out");

ll x,y,z,a,b,c,n,t;

void multiply_matrix(ll A[KMAX][KMAX], ll B[KMAX][KMAX]) {
  ll C[KMAX][KMAX];
  for(ll i = 0; i < KMAX; i++) {
    for(ll j = 0; j < KMAX; j++) {
        C[i][j] = 0;
        for(ll k = 0; k <= 2; k++)
          C[i][j] = (1LL * C[i][j] % mod + 1LL * A[i][k] * B[k][j] % mod) % mod;
    }
  }

    for(ll i = 0; i < KMAX; i++)
      for(ll j = 0; j < KMAX; j++)
        A[i][j] = C[i][j];
}

void rez(ll tmp[3][3],ll p)
{
    ll aux[KMAX][KMAX] = { {0, 0, c},
                         {1, 0, b},
                         {0, 1, a}};

    for (ll i = 0; i < KMAX; ++i) {
        for (ll j = 0; j < KMAX; ++j) {
            tmp[i][j] = (i == j) ? 1 : 0;
        }
    }

    while (p != 1) {
        if  (p % 2 == 0) {
            multiply_matrix(C, C);
            p /= 2;
        } else {
            multiply_matrix(tmp, C);
            --p;
        }
    }

    multiply_matrix(C, tmp);
  /*  for(i = 0; i < KMAX; i++) {
      for(j = 0; j < KMAX; j++) {
         cout << R[i][j] << " ";
      }
      cout << endl;
    }*/
    
}
int main()
{
    f>>t;
    while(t--)
    {
        f>>x>>y>>z>>a>>b>>c>>n;
        ll tmp[3][3];
        rez(tmp,n-2);
        g<<(1LL*tmp[0][2]*x%mod+1LL*tmp[1][2]*y%mod+1LL*tmp[2][2]*z%mod)%mod<<"\n";
    }

    return 0;
}