Cod sursa(job #2716118)

Utilizator Horis21Horia Radu Horis21 Data 4 martie 2021 18:49:27
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

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

int a[3][3];
int sol[3][3];
const int MOD=666013;

void multiplication(int a[3][3],int b[3][3])
{
    int ans[3][3];
    memset(ans,0,sizeof(ans));
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            for(int k=0; k<3; k++)
            {
                ans[i][j]=(ans[i][j]+1LL*a[i][k]*b[k][j])%MOD;
            }
        }
    }
    memcpy(a,ans,sizeof(ans));
}

void logpow(int p)
{
    while(p)
    {
        if(p%2) multiplication(sol,a);
        p/=2;
        multiplication(a,a);
    }
}

int main()
{
    int t,x,y,z,A,B,C,n;
    in >> t;
    while(t--)
    {
        memset(a,0,sizeof(a));
        memset(sol,0,sizeof(sol));
        in >> x >> y >> z >> A >> B >> C >> n;
        /*sol[0][0]=x;
        sol[0][1]=y;
        sol[0][2]=z;
        sol[1][0]=0;
        sol[1][1]=0;
        sol[1][2]=0;
        sol[2][0]=0;
        sol[2][1]=0;
        sol[2][2]=0;
        a[0][0]=0;
        a[0][1]=0;
        a[0][2]=A;
        a[1][0]=1;
        a[1][1]=0;
        a[1][2]=B;
        a[2][0]=0;
        a[2][1]=1;
        a[2][2]=C;*/
        sol[0][0]=sol[1][1]=sol[2][2]=1;
        a[0][0]=A;
        a[0][1]=1;
        a[1][0]=B;
        a[1][2]=1;
        a[2][0]=C;
        logpow(n-2);
        out << (1LL*z*sol[0][0]+1LL*y*sol[1][0]+1LL*x*sol[2][0])%MOD << "\n";
    }
    return 0;
}