Cod sursa(job #964736)

Utilizator mvcl3Marian Iacob mvcl3 Data 22 iunie 2013 11:44:24
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <cstring>
#define Modulo 666013
using namespace std;

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

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

inline void multiply(long long A[4][4], long long B[4][4])
{
    long long sol[4][4];

    for(long long i = 1; i <= 3; ++i)
        for(long long j = 1; j <= 3; ++j)
        {
            sol[i][j] = 0;
            for(long long k = 1; k <= 3; ++k)
                sol[i][j] = (sol[i][j] % Modulo + ((A[i][k] % Modulo) * (B[k][j] % Modulo))) % Modulo;
        }

    memcpy(A, sol, sizeof(sol));
}

void power(long long A[4][4], long long m)
{
    if(m == 0 || m == 1) return;

    power(A, m / 2);
    multiply(A, A);

    if(m % 2)   multiply(A, aux);
}

inline void solve()
{
    M[1][1] = a, M[1][2] = b, M[1][3] = c,
    M[2][1] = 1, M[2][2] = 0, M[2][3] = 0,
    M[3][1] = 0, M[3][2] = 1, M[3][3] = 0;

    memcpy(aux, M, sizeof(M));
    power(M, n - 2);
}

int main()
{
    f >> t;

    while(t --)
    {
        f >> x >> y >> z >> a >> b >> c >> n;
        solve();

        g << ((M[1][1] * z) % Modulo +  (M[1][2] * y) % Modulo + (M[1][3] * x) % Modulo) % Modulo << '\n';
    }
}