Cod sursa(job #2512344)

Utilizator DariusDCDarius Capolna DariusDC Data 20 decembrie 2019 21:38:46
Problema Iepuri Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>
#define mod 666013

using namespace std;

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

int t;
int x, y, z;
int a, b, c;
int n;
int aux[4][4];

inline void inmult(int a[][4], int b[][4], int c[][4])
{
    for (int i = 1; i <= 3; i++)
        for (int j = 1; j <= 3; j++)
            for (int k = 1; k <= 3; k++)
                c[i][j] = (c[i][j] + (1ll * a[i][k] * b[k][j]) % mod) % mod;
}

inline void solve()
{
    int r[4][4];
    memset(r, 0, sizeof(r));
    r[1][1] = r[2][2] = r[3][3] = 1;
    int m[4][4];
    memset(m, 0, sizeof(m));
    m[1][2] = m[2][3] = 1;
    m[3][1] = c;
    m[3][2] = b;
    m[3][3] = a;
    //ridicam matricea m la puterea n-2;
    int p = n - 2;
    while (p)
    {
        if (p % 2 == 1)
        {
            //r = r * m;
            memset(aux, 0, sizeof(aux));
            inmult(r, m, aux);
            memcpy(r, aux, sizeof(aux));
        }
        p /= 2;
        memset(aux, 0 , sizeof(aux));
        inmult(m, m, aux);
        memcpy(m, aux, sizeof(aux));
    }
    fout << (x * r[3][1] + y * r[3][2] + z * r[3][3]) % mod << "\n";
}

int main()
{
    fin >> t;
    while (t--)
    {
        fin >> x >> y >> z;
        fin >> a >> b >> c;
        fin >> n;
        solve();
    }
    return 0;
}