Cod sursa(job #3346428)

Utilizator ItzRazvanCisteian Razvan-Ioan ItzRazvan Data 13 martie 2026 16:16:52
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <bits/stdc++.h>
using namespace std;

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

const int MOD = 666013;

int q;
int a,b,c,x1,x2,x3,n;

struct Matrix {
    long long mat[3][3];
    
    // Constructor care initializeaza matricea cu 0 automat
    Matrix() {
        memset(mat, 0, sizeof(mat));
    }
};

Matrix inmult(Matrix X, Matrix Y){
    Matrix Z;
    for(int i = 0; i < 3; ++i){
        for(int j = 0; j < 3; ++j){
            for(int k = 0; k < 3; ++k){
                Z.mat[i][j] += (X.mat[i][k] % MOD * Y.mat[k][j] % MOD) % MOD;
                Z.mat[i][j] %= MOD;
            }
        }
    }
    return Z;
}

void fe(){
    Matrix A;
    A.mat[0][0] = 0; A.mat[0][1] = 1; A.mat[0][2] = 0;
    A.mat[1][0] = 0; A.mat[1][1] = 0; A.mat[1][2] = 1;
    A.mat[2][0] = c; A.mat[2][1] = b; A.mat[2][2] = a;
    Matrix ans;
    ans.mat[0][0] = 1; ans.mat[0][1] = 0; ans.mat[0][2] = 0;
    ans.mat[1][0] = 0; ans.mat[1][1] = 1; ans.mat[1][2] = 0;
    ans.mat[2][0] = 0; ans.mat[2][1] = 0; ans.mat[2][2] = 1;
    int e = n;
    while(e > 0){
        if(e & 1){
            ans = inmult(ans, A);
        }
        
        A = inmult(A, A);
        e = e >> 1;
    }
    int X[3] = {x1, x2, x3};
    long long rez = 0;
    
    for(int j = 0; j < 3; ++j){
        rez += (ans.mat[0][j] % MOD * X[j] % MOD) % MOD;
        rez %= MOD;
    }
    
    fout << rez << "\n";
}

int main(){
    fin >> q;
    for(int i = 0; i < q; ++i){
        fin >> x1 >> x2 >> x3 >> a >> b >> c >> n;
        fe();
    }    
}