Cod sursa(job #3286109)

Utilizator Ruxandra009Ruxandra Vasilescu Ruxandra009 Data 13 martie 2025 18:50:54
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <vector>
#include <string>

using namespace std;

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

const int mod = 666013;

int m[5][5], v[5][5];

int inm(int a[5][5], int b[5][5])
{
    int c[5][5];
    for(int i = 1; i <= 3; i ++)
        for(int j = 1; j <= 3; j ++){
            c[i][j] = 0;
            for(int t = 1; t <= 3; t ++)
                c[i][j] = (c[i][j] + a[i][t] * b[t][j] % mod) % mod;
        }

    for(int i = 1; i <= 3; i ++)
        for(int j = 1; j <= 3; j ++)
            a[i][j] = c[i][j];
}

void expo(int ans[5][5], int b)
{
    int a[5][5];
    for(int i = 1; i <= 3; i ++)
        for(int j = 1; j <= 3; j ++)
            a[i][j] = ans[i][j];

    while(b)
        if(b % 2 == 0)
            b /= 2, inm(a, a);
        else
            b --, inm(ans, a);
}

void solv()
{
    int x, y, z, a, b, c, n;
    f >> x >> y >> z >> a >> b >> c >> n;

    for(int i = 1; i <= 3; i ++)
        for(int j = 1; j <= 3; j ++)
            m[i][j] = 0;

    m[3][1] = c; m[3][2] = b; m[3][3] = a;
    m[1][2] = m[2][3] = 1; expo(m, n  - 1);

    v[1][1] = x; v[2][1] = y; v[3][1] = z;
    inm(m, v);

    g << m[1][1] << '\n';
}

int main()
{
    int t; f >> t;
    for(; t >= 1; t --)
        solv();
    return 0;
}