Cod sursa(job #2892261)

Utilizator 100pCiornei Stefan 100p Data 21 aprilie 2022 14:42:00
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <bits/stdc++.h>
#define ull unsigned long long
#define FILES freopen("iepuri.in","r",stdin);\
              freopen("iepuri.out","w",stdout);
#define CMAX 15485863
#define fastio std::ios_base::sync_with_stdio(NULL),cin.tie(NULL),cout.tie(NULL);
#define mp make_pair
#define INF 1e18
#define mod 666013
#define ll long long
#define SMAX 300
#define MAX 10
#define pb push_back
#define add emplace_back
#define void inline void
#define int ll
using namespace std;
int x,y,z,a,b,c,n,t, dp[MAX+5][MAX+5], dp2[MAX+5][MAX+5];
void Multiply(int A[MAX+5][MAX+5], int B[MAX+5][MAX+5])
{
    int new_dp[MAX+5][MAX+5] = {0};
    for(int i = 1;i <= 3; ++i)
    {
        for(int j = 1;j <= 3; ++j)
        {
            for(int k = 1;k <= 3; ++k)
                new_dp[i][j] = (new_dp[i][j] + B[k][j] * A[i][k]) % mod;
        }
    }
    for(int i = 1;i <= 3; ++i)
        for(int j = 1;j <= 3; ++j) A[i][j] = new_dp[i][j];
}
int faxexp(int exp)
{
    while(exp)
    {
        if(exp & 1)
            Multiply(dp,dp2);
        Multiply(dp2,dp2);
        exp >>= 1;
    }
}
signed main()
{
    fastio
    FILES
    cin >> t;
    while(t--)
    {
        for(int i = 1;i <= 3; ++i)
            for(int j = 1;j <= 3; ++j)
            dp[i][j] = dp2[i][j] = 0;
        cin >> x >> y >> z >> a >> b >> c >> n;
        dp2[1][3] = c, dp2[2][3] = b, dp2[3][3] = a;
        dp2[2][1] = dp2[3][2] = 1;
        dp[1][1] = x, dp[1][2] = y, dp[1][3] = z;
        n -= 2;
        faxexp(n);
        cout << dp[1][3] << '\n';
    }
}