Cod sursa(job #1043230)

Utilizator crisbodnarCristian Bodnar crisbodnar Data 28 noiembrie 2013 09:46:49
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <memory.h>

using namespace std;

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

const int mod = 666013;
long long X, Y, Z, A, B, C, n, t, m[5][5], p[5][5], r[5][5];

void Inm(long long a[][5], long long b[][5], long long c[][5])
{
    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;
}

void Exp(int k)
{
    memset(p, 0, sizeof p);
    memset(m, 0, sizeof m);
    p[1][1] = p[2][2] = p[3][3] = 1;
    m[1][2] = m[2][3] = 1;
    m[3][1] = C, m[3][2] = B, m[3][3] = A;
    for(long long i=1LL; i <= k; i<<=1)
    {
        if(i & k)
        {
            memset(r, 0, sizeof r);
            Inm(p, m, r);
            memcpy(p, r, sizeof r);
        }
        memset(r, 0, sizeof r);
        Inm(m, m, r);
        memcpy(m, r, sizeof r);
    }
}

int main()
{
    fin>>t;
    while(t--)
    {
        fin>>X>>Y>>Z>>A>>B>>C>>n;
        Exp(n-2);
        fout<<(p[3][1]*X + p[3][2]*Y + p[3][3]*Z) % mod << '\n';
    }
    return 0;
}