Cod sursa(job #2184404)

Utilizator remus88Neatu Remus Mihai remus88 Data 24 martie 2018 00:57:07
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <fstream>
#include <cstring>
#define MOD 666013
#define D 4

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

int T,x,y,z,a,b,c;
long long I[D][D],n;

void MatrixMultiplication (long long A[D][D], long long B[D][D], long long C[D][D]) {

    long long aux[D][D];
    memset(aux,0,sizeof(aux));

    for (int i=1; i<=3; ++i)
        for (int j=1; j<=3; ++j) {

            long long S=0;
            for (int k=1; k<=3; ++k) {

                S += 1LL * (A[i][k]%MOD) * (B[k][j]%MOD);
            }
            aux[i][j] = (1LL*(S%MOD))%MOD;
        }

    memcpy(C,aux,sizeof(aux));
}

void MatrixPower(long long A[D][D], long long k) {

    long long aux[D][D];
    memset(aux,0,sizeof(aux));
    for (int i=1; i<=3; ++i) aux[i][i]=1;

    while (k>1) {

        if (k%2==0) {

            k=k/2;
            MatrixMultiplication(A,A,A);
        }
        else {

            --k;
            MatrixMultiplication(aux,A,aux);
        }
    }

    MatrixMultiplication(aux,A,A);
}

void Solve() {

    f>>x>>y>>z>>a>>b>>c>>n;

    I[1][1]=0; I[1][2]=1; I[1][3]=0;
    I[2][1]=0; I[2][2]=0; I[2][3]=1;
    I[3][1]=c; I[3][2]=b; I[3][3]=a;

//    for (int i=1; i<=3; ++i) {
//
//        for (int j=1; j<=3; ++j) g<<I[i][j]<<' ';
//        g<<'\n';
//    }

    MatrixPower(I,n-2);

//    for (int i=1; i<=3; ++i) {
//
//        for (int j=1; j<=3; ++j) g<<I[i][j]<<' ';
//        g<<'\n';
//    }

    int S=0;

    S += ((x%MOD) * (I[3][1]%MOD)) % MOD;
    S += ((y%MOD) * (I[3][2]%MOD)) % MOD;
    S += ((z%MOD) * (I[3][3]%MOD)) % MOD;

    g<<S<<'\n';
//    g<<'\n'<<'\n';
}

int main() {

    f>>T;
    for (int test=1; test<=T; ++test) {

        Solve();
    }

    f.close(); g.close();
    return 0;
}