Cod sursa(job #2530848)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 25 ianuarie 2020 13:02:54
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <bits/stdc++.h>

using namespace std;

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

int unu[4][4];
int mat[4][4];
int aux[4][4];
int MOD = 666013;
void setI(){
    int i,j;
    for(i = 1; i <= 3; i++){
        for(j = 1; j <= 3; j++){
            if(i == j){
                unu[i][j] = 1;
            }else{
                unu[i][j] = 0;
            }
        }
    }
}

void setmat(int A,int B,int C){
    mat[1][1] = A;
    mat[1][2] = B;
    mat[1][3] = C;
    mat[2][1] = 1;
    mat[2][2] = 0;
    mat[2][3] = 0;
    mat[3][1] = 0;
    mat[3][2] = 1;
    mat[3][3] = 0;
}

void matmul(){
    int i,j,k;
    for(i = 1; i <= 3; i++){
        for(j = 1; j <= 3; j++){
            aux[i][j] = ((unu[i][1]*mat[1][j])%MOD + (unu[i][2]*mat[2][j])%MOD + (unu[i][3]*mat[3][j])%MOD)%MOD;
        }
    }
    for(i = 1; i <= 3; i++){
        for(j = 1; j <= 3; j++){
            unu[i][j] = aux[i][j];
        }
    }
}

void matmat(){
    int i,j,k;
    for(i = 1; i <= 3; i++){
        for(j = 1; j <= 3; j++){
            aux[i][j] = ((mat[i][1]*mat[1][j])%MOD + (mat[i][2]*mat[2][j])%MOD + (mat[i][3]*mat[3][j])%MOD)%MOD;
        }
    }
    for(i = 1; i <= 3; i++){
        for(j = 1; j <= 3; j++){
            mat[i][j] = aux[i][j];
        }
    }
}

void putlog(int n){
    while(n != 0){
        if(n%2 == 1){
            matmul();
        }
        matmat();
        n>>=1;
    }
}

int main()
{
    int i,A,B,C,t,x0,x1,x2,n;
    int rez;
    fin>>t;
    for(i = 1; i <= t; i++){
        fin>>x0>>x1>>x2>>A>>B>>C>>n;
        setI();
        setmat(A,B,C);
        putlog(n-2);
        fout<<((unu[1][1]*x2)%MOD+(unu[1][2]*x1)%MOD + (unu[1][3]*x0)%MOD)%MOD<<endl;
    }
    return 0;
}