Cod sursa(job #3264258)

Utilizator ioanabaduIoana Badu ioanabadu Data 19 decembrie 2024 19:29:56
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <fstream>
#define MOD 666013

using namespace std;

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

int tests, x, y, z, a, b, c, day;
int initial[3];

struct matrix{
    int x[3][3];
}name;

matrix multiply (matrix a, matrix b){
    for (int i=0; i<3; ++i)
        for (int j=0; j<3; ++j){
            name.x[i][j] = 0;
            for (int idx=0; idx<3; ++idx){
                    name.x[i][j] += a.x[i][idx] * b.x[idx][j] % MOD;
            }
        }
    return name;
}

matrix powerUp (matrix a, int power){
    if (power == 1)
        return a;
    if (power % 2)
        return multiply(powerUp(multiply(a, a), power/2), a);
    return powerUp(multiply(a, a), power/2);
}

void finalStep (){
    int sol = 0;
    for (int i=0; i<3; ++i){
        sol += initial[i] * name.x[i][2] % MOD;
    }
    out << sol % MOD << '\n';
}

int main (){
    in >> tests;
    for (; tests; --tests){
        in >> x >> y >> z >> a >> b >> c >> day;

        matrix aux;
        for (int i=0; i<3; ++i)
            for (int j=0; j<3; ++j)
                aux.x[i][j] = 0;

        aux.x[1][0] = 1, aux.x[2][1] = 1;
        aux.x[0][2] = c, aux.x[1][2] = b, aux.x[2][2] = a;
        initial[0] = x, initial[1] = y, initial[2] = z;

        if (day <= 2){
            out << initial[day] << '\n';
            continue;
        }

        powerUp(aux, day-2);
        finalStep();
    }

    return 0;
}