Cod sursa(job #2018333)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 4 septembrie 2017 16:36:55
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <iostream>

using namespace std;

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

typedef long long mat[3][3];
long long A, B, C, x, y, z, n, s;

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

void copii(mat a, mat b) {
    int i, j;
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
            a[i][j] = b[i][j];
}

long long rid() {
    mat sol = {0}, a = {0}, tmp = {0};
    sol[0][0] = sol[1][1] = sol[2][2] = 1;
    a[0][1] = a[1][2] = 1, a[2][0] = C, a[2][1] = B, a[2][2] = A;

    n -= 2;
    while (n) {
        if (n&1) {
            inm(sol, a, tmp);
            copii(sol, tmp);
        }
        inm(a, a, tmp);
        copii(a, tmp);
        n >>= 1;
    }

    return x*sol[2][0] + y*sol[2][1] + z*sol[2][2];
}

int main() {
    f >> s;
    while (s--) {
        f >> x >> y >> z >> A >> B >> C >> n;
        g << rid() << '\n';
    }

    return 0;
}