Cod sursa(job #2692012)

Utilizator Vaida_Radu_AndreiVaida Radu Andrei Vaida_Radu_Andrei Data 31 decembrie 2020 08:59:51
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <cstdio>
#define mod 666013

using namespace std;

int n,day0,day1,day2,m[3][3],sol[3][3];

void mset() {
    int i,j;
    m[0][0]=0;
    m[0][1]=0;
    m[1][0]=1;
    m[1][1]=0;
    m[2][0]=0;
    m[2][1]=1;
    for(i=0;i<3;++i) {
        for(j=0;j<3;++j) {
            sol[i][j]=(i==j);
        }
    }
}

void read() {
    mset();
    scanf("%d%d%d%d%d%d%d",&day0,&day1,&day2,&m[2][2],&m[1][2],&m[0][2],&n);
}

void multMatrix() {
    int i,j,r[3][3];
    for(i=0;i<3;++i) {
        for(j=0;j<3;++j) {
            r[i][j]=m[i][0]*sol[0][j]+m[i][1]*sol[1][j]+m[i][2]*sol[2][j];
        }
    }
    for(i=0;i<3;++i) {
        for(j=0;j<3;++j) {
            sol[i][j]=r[i][j];
        }
    }
}

void squareMatrix() {
    int i,j,r[3][3];
    for(i=0;i<3;++i) {
        for(j=0;j<3;++j) {
            r[i][j]=m[i][0]*m[0][j]+m[i][1]*m[1][j]+m[i][2]*m[2][j];
        }
    }
    for(i=0;i<3;++i) {
        for(j=0;j<3;++j) {
            m[i][j]=r[i][j];
        }
    }
}

void powMatrix(int exp) {
    if(exp) {
        if(exp%2) {
            multMatrix();
        }
        squareMatrix();
        powMatrix(exp>>1);
    }
}

void solve() {
    powMatrix(n-2);
}

void display() {
    printf("%d\n",day0*sol[0][2]+day1*sol[1][2]+day2*sol[2][2]);
}

void play() {
    read();
    solve();
    display();
}

int main() {
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    int iq,q;
    scanf("%d",&q);
    for(iq=0;iq<q;++iq) {
        play();
    }
    return 0;
}