Cod sursa(job #2671751)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 12 noiembrie 2020 17:31:16
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <fstream>
#define nl '\n'
using namespace std;
ifstream f ( "iepuri.in" );
ofstream g ( "iepuri.out" );
const int MOD = 666013;
int X, Y, Z, A, B, C, N;
int ans[3][3], mat[3][3];
void init()
{
    for ( int i = 0; i < 3; i++ )
        for ( int j = 0; j < 3; j++ )
            if ( i == j )
                ans[i][j] = 1;
            else ans[i][j] = 0;

    mat[0][0] = mat[0][1] = mat[1][1] = mat[2][0] = 0;
    mat[1][0] = mat[2][1] = 1;
    mat[0][2] = C;
    mat[1][2] = B;
    mat[2][2] = A;
}
void multMat ( int A[][3], int B[][3] )
{
    static int C[3][3];

    for ( int i = 0; i < 3; i++ )
        for ( int j = 0; j < 3; j++ )
        {
            C[i][j] = 0;

            for ( int k = 0; k < 3; k++ )
                C[i][j] = ( C[i][j] + 1LL * A[i][k] * B[k][j] ) % MOD;
        }

    for ( int i = 0; i < 3; i++ )
        for ( int j = 0; j < 3; j++ )
            A[i][j] = C[i][j];
}
void powlg ( int p )
{
    init();

    while ( p )
    {
        if ( p & 1 )
        {
            p--;
            multMat ( ans, mat );
        }
        else
        {
            p >>= 1;
            multMat ( mat, mat );
        }
    }
}
int main()
{
    int T;
    f >> T;

    while ( T-- )
    {
        f >> X >> Y >> Z >> A >> B >> C >> N;
        powlg ( N - 2 );
        int sum=(1LL*X*ans[0][2]+1LL*Y*ans[1][2]+1LL*Z*ans[2][2])%MOD;
        g<<sum<<nl;
    }

    return 0;
}