Cod sursa(job #3158963)

Utilizator davidenko22Stancu David-Andrei davidenko22 Data 20 octombrie 2023 11:05:32
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda HLO 2023 - Cls 11-12 - Tema 0 Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

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

const int mod = 666013;

void copie(long long a[3][3], long long b[3][3]) {
    int i,j;
    for ( i = 0; i <= 2; i++ )
      for ( j = 0; j <= 2; j++ )
        a[i][j] = b[i][j];
}
void inmultire(long long a[3][3], long long b[3][3], long long c[3][3]) {
    int i,j,k;
    for ( i = 0; i <= 2; i++ ) {
      for ( j = 0; j <= 2; j++ ) {
        c[i][j]=0;
        for ( k = 0; k <= 2; k++ )
          c[i][j] = c[i][j] + a[i][k] * b[k][j], c[i][j] %= mod;
        }
    }
}

int main()
{
    long long n, x, y, z, a1, b1, c1, t;
    in >> t;
    for ( int i = 1; i <= t; i++ ) {
      in >> x >> y >> z >> a1 >> b1 >> c1 >> n;
      n = n - 2;
      long long p[3][3] = {{1,0,0},{0,1,0},{0,0,1}};
      long long a[3][3] = {{a1,b1,c1},{1,0,0},{0,1,0}};
      long long b[3][3];
      while ( n != 0 ) {
        if ( n % 2 == 1 ) {
          inmultire( p, a, b );
          copie( p, b );
        }
        inmultire( a, a, b );
        copie( a, b );
        n = n / 2;
      }
      out << (z * p[0][0] + y * p[0][1] + x * p[0][2]) % mod << '\n';
    }
    return 0;
}