Cod sursa(job #1820920)

Utilizator eddie.deaconuDeaconu Stefan-Eduard eddie.deaconu Data 2 decembrie 2016 13:10:11
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int P = 666013;

short T, X, Y, Z, A, B, C;
int N;

void prod(int A[3][3], int B[3][3])
{
    int C[3][3] = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };
    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3; j++)
        {
            for(int k = 0; k < 3; k++)
                C[i][j] += A[i][k] * B[k][j];
        }
    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3; j++)
            A[i][j] = C[i][j] % P;
}

int putere(int n)
{
    int PUT[3][3] = { { 0, 0 }, { 1, 0 }, { 0, 1 } };
    int M[3][3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } };
    PUT[0][2] = C;
    PUT[1][2] = B;
    PUT[2][2] = A;
    while(n)
    {
        while(n % 2 == 0)
        {
            prod(PUT, PUT);
            n /= 2;
        }
        prod(M, PUT);
        n--;
    }
    return (X * M[0][2] + Y * M[1][2] + Z * M[2][2]) % P;
}

int main()
{
    f >> T;
    while(T--)
    {
        f >> X >> Y >> Z >> A >> B >> C >> N;
        g << putere(N - 2);
        if (T)
            g << "\n";
    }
    f.close();
    g.close();
    return 0;
}