Cod sursa(job #2357376)

Utilizator CriogeniXBociat Daniel Tiberiu CriogeniX Data 27 februarie 2019 12:42:05
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
using namespace std;

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

const int mod = 666013;
int X,Y,Z,A,B,C,N,T;
int M[5][5], R[5][5];

void Read()
{
    in >> X >> Y >> Z >> A >> B >> C >> N;
}

void Multiply(int Q[5][5], int P[5][5])
{
    int S[4][4];
    for(int i = 1; i<=3;++i)
        for(int j = 1; j<=3;++j)
            S[i][j] = (Q[i][1]*P[1][j] + Q[i][2]*P[2][j] + Q[i][3]*P[3][j])%mod;
    for(int i = 1; i<=3;++i)
        for(int j = 1; j<=3;++j)
            Q[i][j] = S[i][j];
}

void Power(int p)
{
    for(int i = 1; i <= 3; ++i)
        R[i][i] = 1;
    M[1][3] = C;
    M[2][1] = 1;
    M[2][3] = B;
    M[3][2] = 1;
    M[3][3] = A;
    while(p){
        if(p % 2 == 1)
          Multiply(R, M);
        Multiply(M,M);
        p /= 2;
    }
}

void Solve()
{
    int Sol;
    Sol = (X * M[1][1] + Y * M[2][1] + Z * M[3][1])%mod;
    cout<<Sol;
}

void Print()
{
    for(int i = 1; i<=3;++i)
    {
        for(int j = 1; j<=3;++j)
            cout<<R[i][j]<<' ';
        cout<<'\n';
    }
}

int main()
{
    in >> T;
    while(T--)
    {
        Read();
        Power(4);
        Solve();
        Print();
    }
    return 0;
}