Cod sursa(job #2391246)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 28 martie 2019 18:49:49
Problema Iepuri Scor 90
Compilator cpp-64 Status done
Runda conccsd Marime 1.26 kb
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
typedef long long ll;
ll X,Y,Z,A,B,C,N,T;
ll sol[4][4],rez[4][4],M[4][4];

int main()
{
    f>>T;
    for(ll t=1;t<=T;t++)
    {
        f>>X>>Y>>Z>>A>>B>>C>>N;
        M[1][1]=0;M[1][2]=1;M[1][3]=0;
        M[2][1]=0;M[2][2]=0;M[2][3]=1;
        M[3][1]=C;M[3][2]=B;M[3][3]=A;
        for(ll i=1;i<=3;i++)
            for(ll j=1;j<=3;j++) sol[i][j]=0;

        sol[1][1]=sol[2][2]=sol[3][3]=1;

        for(int j=0;(1<<j)<=N;j++)
        {
            if( (N&(1<<j))>0 )
            {
                for(ll a=1;a<=3;a++)
                for(ll c=1;c<=3;c++)
                rez[a][c]=((sol[a][1]*M[1][c])%MOD+(sol[a][2]*M[2][c])%MOD+(sol[a][3]*M[3][c])%MOD)%MOD;

                for(ll a=1;a<=3;a++)
                for(ll c=1;c<=3;c++)
                sol[a][c]=rez[a][c];

            }

        for(ll a=1;a<=3;a++)
        for(ll c=1;c<=3;c++)
        rez[a][c]=((M[a][1]*M[1][c])%MOD+(M[a][2]*M[2][c])%MOD+(M[a][3]*M[3][c])%MOD)%MOD;

        for(ll a=1;a<=3;a++)
        for(ll c=1;c<=3;c++)
        M[a][c]=rez[a][c];


        }
        g<<(X*sol[1][1]+Y*sol[1][2]+Z*sol[1][3])%MOD<<'\n';
    }
    return 0;
}