Cod sursa(job #963833)

Utilizator mvcl3Marian Iacob mvcl3 Data 19 iunie 2013 16:06:42
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <cstring>
#define Modulo 666013
using namespace std;

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

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

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

    for(int i = 1; i <= 3; ++i)
        for(int j = 1; j <= 3; ++j)
        {
            sol[i][j] = 0;
            for(int 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(int A[4][4], int 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 +  M[1][2] * y + M[1][3] * x) % Modulo << '\n';
    }
}