Cod sursa(job #3288513)

Utilizator Nasa1004Ema Nicole Gheorghe Nasa1004 Data 22 martie 2025 16:12:11
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <fstream>

using namespace std;
const int MOD = 666013;

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

int adj[3][3];
void init(int a, int b, int c) {
    adj[0][0] = 0, adj[0][1] = 0, adj[0][2] = c;
    adj[1][0] = 1, adj[1][1] = 0, adj[1][2] = b;
    adj[2][0] = 0, adj[2][1] = 1, adj[2][2] = a;
}

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

int p[3][3];
void logexp(int n) {
    for(int i = 0; i < 3; i++) ///init
        for(int j = 0; j < 3; j++)
            p[i][j] = 0;
    p[0][0] = p[1][1] = p[2][2] = 1;

    for(int k = 1; k <= n; k <<= 1) {
        if(n & k)
            inmultire(p, adj);
        inmultire(adj, adj);
    }
}

void print(int a[3][3]) {
    cout << '\n';
    cout << "PRINT\n";
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            cout << a[i][j] << " ";
        }
        cout << '\n';
    }
}

int main()
{
    int t;
    cin >> t;
    while(t--) {
        int x, y, z, a, b, c, n;
        cin >> x >> y >> z; ///in zilele 0, 1, 2
        cin >> a >> b >> c; ///inmultirile
        cin >> n;
        init(a, b, c);
        logexp(n - 2);
        long long ans = (x * p[0][2] + y * p[1][2] + z * p[2][2]) % MOD;
        cout << ans << '\n';
    }
    return 0;
}