Cod sursa(job #3327136)

Utilizator Lex._.Lex Guiman Lex._. Data 2 decembrie 2025 15:46:23
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;

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


array<array<int, 3>, 3> inmultire(array<array<int, 3>, 3>& a, array<array<int, 3>, 3>& b) ///inmulteste doua matrici
{
    array<array<int, 3>, 3> ans={0};
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            for(int k=0; k<3; k++)
                ans[i][j]=(ans[i][j] + 1ll*a[i][k]*b[k][j])%MOD;
        }
    }
    return ans;
}

array<array<int, 3>, 3> exponentiere_rapida(array<array<int, 3>, 3> a, int e)
{
    array<array<int, 3>, 3> p={0};
    for(int i=0; i<3; i++) p[i][i]=1;
    while(e>0)
    {
        if((e&1)==1) p=inmultire(p, a);
        a=inmultire(a, a);
        e>>=1;
    }
    return p;
}

int main()
{
    int t;
    in >> t;
    while(t--)
    {
        int x, y, z, a, b, c, n;
        in >> x >> y >> z >> a >> b >> c >> n;
        array<array<int, 3>, 3> ans={0}, m={0};

        ans[0][0]=z; ans[0][1]=y; ans[0][2]=x;
        m[0][0]=a; m[1][0]=b; m[2][0]=c;
        m[0][1]=1; m[1][2]=1;

        m=exponentiere_rapida(m, n-2);
        ans=inmultire(ans, m);
        out << ans[0][0] << "\n";
    }

    return 0;
}