Cod sursa(job #2240689)

Utilizator cory1211Corina cory1211 Data 13 septembrie 2018 21:07:40
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#define ll long long
#define mod 666013
using namespace std;

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

ll x,y,z,a,b,c,n,t;

void inm(ll tbi1[3][3],ll tbi2[3][3])
{
    ll tbi3[3][3];
    for(ll i=0; i<=2; ++i)
        for(ll j=0; j<=2; ++j)
        {
            tbi3[i][j]=0;
            for(ll k=0; k<=2; ++k)
                tbi3[i][j]=(1LL * tbi3[i][j] % mod + 1LL * tbi1[i][k] * tbi2[k][j] % mod) % mod;
        }
    for(ll i=0; i<=2; ++i)
        for(ll j=0; j<=2; ++j)
            tbi1[i][j] = tbi3[i][j];
}
void rez(ll mat[3][3],ll p)
{
    ll aux[3][3];
    for(ll i=0; i<=2; ++i)
        for(ll j=0; j<=1; ++j)
            aux[i][j]=0;
    aux[1][0]=aux[2][1]=1;
    aux[0][2]=c;
    aux[1][2]=b;
    aux[2][2]=a;
    for(ll i=0; i<=2; ++i)
        for(ll j=0; j<=2; ++j)
            mat[i][j]=0;
    mat[0][0]=mat[1][1]=mat[2][2]=1;


    while(p)
    {
        if(p%2)
            inm(mat,aux);
        inm(aux,aux);
        p/=2;
    }
}
int main()
{
    f>>t;
    while(t--)
    {
        f>>x>>y>>z>>a>>b>>c>>n;
        ll aux[3][3];
        rez(aux,n-2);
        g<<(1LL*aux[0][2]*x%mod+1LL*aux[1][2]*y%mod+1LL*aux[2][2]*z%mod)%mod<<"\n";
    }

    return 0;
}