Cod sursa(job #2292614)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 29 noiembrie 2018 19:10:41
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.76 kb
#include<fstream>
using namespace std;
ifstream in ("iepuri.in");
ofstream out ("iepuri.out");
const int mod = 666013;
int aux[4][4] = {{0,0,0,0},{0,0,0,0},{0,1,0,0},{0,0,1,0}};
int cc[4][4],mat[4][4],ini[4][4],iepuri[4][4];
int t,x,y,z,a,b,c,k;
void inmulteste (int aa[4][4], int bb[4][4]) {
    for (int i = 1; i <= 3; i ++) {
        for (int j = 1; j <= 3; j ++) {
            cc[i][j] = 0;
        }
    }
    for (int i = 1; i <= 3; i ++) {
        for (int j = 1; j <= 3; j ++) {
            for (int k = 1; k <= 3; k ++) {
                cc[i][j] = (cc[i][j] + 1LL*aa[i][k] * bb[k][j]) % mod;
            }
        }
    }
    for (int i = 1; i <= 3; i ++) {
        for (int j = 1; j <= 3; j ++) {
            aa[i][j] = cc[i][j];
        }
    }

    return;
}
void exponentiere (int n) {
    if (n/2 > 0) {
        exponentiere(n/2);
        inmulteste (mat,mat);
    }
    if (n % 2 == 1) {
        inmulteste (mat,ini);
    }
}
int main (void) {
    in >> t;
    while (t --) {
        in >> x >> y >> z >> a >> b >> c >> k;
        for (int i = 1; i <= 3; i ++) {
            for (int j = 1; j <= 3; j ++) {
                iepuri[i][j] = 0;
            }
        }
        iepuri[1][1] = x; iepuri[1][2] = y; iepuri[1][3] = z;

        for (int i = 1; i <= 3; i ++) {
            for (int j = 1; j <= 3; j ++) {
                ini[i][j] = aux[i][j];
            }
        }
        ini[1][3] = c; ini[2][3] = b; ini[3][3] = a;

        for (int i = 1; i <= 3; i ++) {
            for (int j = 1; j <= 3; j ++) {
                mat[i][j] = 0;
            }
            mat[i][i] = 1;
        }

        exponentiere(k);
        inmulteste(iepuri,mat);
        out << iepuri[1][1] <<"\n";

    }

    return 0;
}