Cod sursa(job #1629883)

Utilizator Bot32King Max Bot32 Data 4 martie 2016 19:43:34
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

#define ll long long
#define mod 666013
ifstream f("iepuri.in");
ofstream g("iepuri.out");

ll T ;
ll A , B , C , X , Y , Z , N;
ll x[4][4] , a[4][4] , sol[4][4];

void inmultire ( ll a[4][4] , ll b[4][4] )
{
    ll c[4][4];
    for ( int i = 1; i <= 3; i++ )
        for ( int j = 1; j <= 3; j++ )
        {
            c[i][j] = 0;
            for ( int d = 1 ; d <= 3; d++ )
                c[i][j] = c[i][j] + a[i][d]*b[d][j] ;
        }
    for ( int i = 1; i <= 3 ; i++ )
        for ( int j = 1; j <= 3; j++ )
            a[i][j] = c[i][j] % mod;
}

void exp_log ( int k )
{
    while ( k )
    {
        if ( k % 2 == 1 )
        {
            inmultire(a,x);
            k--;
        }
        else{
            k/=2;
            inmultire(x,x);
        }
    }
    g << a[1][3] << "\n" ;
}

int main()
{
    f >> T;
    for ( ; T-- ; )
    {
        f >> X >> Y >> Z >> A >> B >> C >> N;
        memset(a,0,sizeof a);
        a[1][1] = X;
        a[1][2] = Y;
        a[1][3] = Z;
        //
        memset(x,0,sizeof x);
        x[1][3] = C;
        x[2][1] = 1;
        x[3][2] = 1;
        x[2][3] = B;
        x[3][3] = A;
        //
        N-=2;
        exp_log(N);
    }
    return 0;
}