Cod sursa(job #1385251)

Utilizator tudorv96Tudor Varan tudorv96 Data 11 martie 2015 20:10:04
Problema Iepuri Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
using namespace std;

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

const int mod = 666013;

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

void atrib(int a[][3], int x) {
    for (int i = 0; i < 3; ++i)
        for (int j = 0; j < 3; ++j)
            a[i][j] = x;
}

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

void multiply(int r[][3], int a[][3], int b[][3]) {
    for (int k = 0; k < 3; ++k)
        for (int i = 0; i < 3; ++i)
            for (int j = 0; j < 3; ++j)
                r[i][j] = (r[i][j] + 1LL * a[i][k] * b[k][j]) % mod;
}

int main() {
    fin >> t;
    while (t--) {
        fin >> x >> y >> z >> a >> b >> c >> n;
        int sol[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, aux[3][3] = {{0, 0, c}, {1, 0, b}, {0, 1, a}};
        n -= 2;
        for (int i = 1; i <= n; i <<= 1) {
            if (i & n) {
                int now[3][3];
                atrib(now, 0);
                multiply(now, sol, aux);
                atrib(sol, now);
            }
            int now[3][3];
            atrib(now, 0);
            multiply(now, aux, aux);
            atrib(aux, now);
        }
        fout << (1LL * x * sol[0][2] + y * sol[1][2] + z * sol[2][2]) % mod << "\n";
    }
}