Cod sursa(job #2721591)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 11 martie 2021 23:36:15
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <iostream>

using namespace std;

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

const long long MOD=666013;
long long m[4][4], p[4][4], rez[101], k, sol[4][4];

void inmulteste(long long m1[4][4], long long m2[4][4]){
    long long aux[4][4];
    for(int i=1;i<=3;++i){
        for(int j = 1; j <= 3; j++) {
            aux[i][j] = 0;
            for(int k = 1; k <= 3; k++) {
                aux[i][j] = (aux[i][j] + m1[i][k] * m2[k][j]) % MOD;
            }
        }
        
    }
    for(int i=1;i<=3;++i){
        for(int j = 1; j <= 3; j++) {
            m1[i][j] = aux[i][j];
        }
    }
}

int main(){
    long long x, y, z, a, b, c, n, t;
    f >> t;
    for(int i=1;i<=t;++i){
        f >> x >> y >> z >> a >> b >> c >> n;
        m[1][1]=0;
        m[1][2]=1;
        m[1][3]=0;
        m[2][1]=0;
        m[2][2]=0;
        m[2][3]=1;
        m[3][1]=c;
        m[3][2]=b;
        m[3][3]=a;
        p[1][1]=x;
        p[2][1]=y;
        p[3][1]=z;
        sol[1][1] = sol[2][2] = sol[3][3] = 1;
        while(n){
            if(n%2){
                inmulteste(sol, m);
            }
            inmulteste(m, m);
            n/=2;
        }
        inmulteste(sol, p);
        rez[++k]=sol[1][1];
    }
    for(int i=1;i<=k;++i){
        g << rez[i] << "\n";
    }
    return 0;
}