Cod sursa(job #3170052)

Utilizator ungureanubogdan07Ungureanu Bogdan ungureanubogdan07 Data 16 noiembrie 2023 18:35:42
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>
#include <vector>
#define int long long

using namespace std;

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

const int MOD = 666013;
struct mat3x3 {
    int a11, a12, a13, a21, a22, a23, a31, a32, a33;
};

mat3x3 inmultire(mat3x3 a, mat3x3 b)
{   
    mat3x3 c;
    c.a11 = (a.a11 * b.a11 + a.a12 * b.a21 + a.a13 * b.a31) % MOD;
    c.a21 = (a.a21 * b.a11 + a.a22 * b.a21 + a.a23 * b.a31) % MOD;
    c.a31 = (a.a31 * b.a11 + a.a32 * b.a21 + a.a33 * b.a31) % MOD;
    c.a12 = (a.a11 * b.a12 + a.a12 * b.a22 + a.a13 * b.a32) % MOD;
    c.a22 = (a.a21 * b.a12 + a.a22 * b.a22 + a.a23 * b.a32) % MOD;
    c.a32 = (a.a31 * b.a12 + a.a32 * b.a22 + a.a33 * b.a32) % MOD;
    c.a13 = (a.a11 * b.a13 + a.a12 * b.a23 + a.a13 * b.a33) % MOD;
    c.a23 = (a.a21 * b.a13 + a.a22 * b.a23 + a.a23 * b.a33) % MOD;
    c.a33 = (a.a31 * b.a13 + a.a32 * b.a23 + a.a23 * b.a33) % MOD;
    return c;
}

mat3x3 exp(mat3x3 a, int p) 
{
    if(p == 0) return {1, 0, 0, 0, 1, 0, 0, 0, 1};
    if(p % 2) return inmultire(a, exp(a, p - 1));
    mat3x3 aux = exp(a, p / 2);
    return inmultire(aux, aux);
}   

int x, y, z, a, b, c, n;

signed main()
{ 
    int t; cin >> t;
    while(t--) {
        int x, y, z, a, b, c, n;
        cin >> x >> y >> z >> a >> b >> c >> n;
        mat3x3 aux = {0, 1, 0, 0, 0, 1, c, b, a};
        mat3x3 m = exp(aux, n);
        cout << ((m.a11 * x) % MOD + (m.a12 * y) % MOD + (m.a13 * z) % MOD) % MOD << '\n';
    }
    return 0;
}