Cod sursa(job #2436241)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 5 iulie 2019 11:21:58
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#define MOD 666013

using namespace std;

typedef vector<vector<long long>> matrix;

matrix prod( matrix A, matrix B ) {
  matrix C(3,vector<long long>(3));
  for( int i = 0; i < 3; i ++ )
    for( int j = 0; j < 3; j ++ )
      for( int k = 0; k < 3; k ++ )
        C[i][j] = ( C[i][j] + A[i][k] * B[k][j] % MOD ) % MOD;
  return C;
}

matrix lgput( matrix A, long long n ) {
  if( n == 1 )
    return A;
  if( n % 2 == 0 )
    return lgput(prod(A,A), n / 2);
  return prod(A,lgput(A, n - 1));
}


int main() {
    ifstream fin("iepuri.in");
    ofstream fout("iepuri.out");
    long long t, n, a, b, c, x, y, z;
    fin>>t;
    while ( t -- ) {
      fin>>x>>y>>z>>a>>b>>c>>n;
      matrix A(3,vector<long long>(3));
      n = n - 2;
      A[0][0] = A[0][2] = A[1][0] = A[1][1] = 0;
      A[0][1] = A[1][2] = 1;
      A[2][0] = c;
      A[2][1] = b;
      A[2][2] = a;
      vector<long long> v = {x,y,z};
      A = lgput(A,n);
      long long ans = 0;
      for( int i = 0; i < 3; i ++ )
        ans = (ans + A[2][i] * v[i] % MOD) % MOD;
      fout<<ans<<"\n";
    }
    return 0;
}