Cod sursa(job #2694379)

Utilizator evelina.nitoiuNitoiu Evelina evelina.nitoiu Data 8 ianuarie 2021 23:51:16
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>
#define MOD 666013

using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");

void mProduct(long long A[4][4],long long B[4][4],long long C[4][4])
{
	long long rez[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
	for(int i=1;i<=3;++i)
		for(int j=1;j<=3;++j)
			for(int k=1;k<=3;++k)
				rez[i][j]=(rez[i][j]+(A[i][k]*B[k][j])%MOD)%MOD;
	for(int i=1;i<=3;++i)
		for(int j=1;j<=3;++j)
			C[i][j]=rez[i][j];
}
int n;
long long m[4][4];
int x,y,z;
int numTests;
int main()
{
    in>>numTests;
    while(numTests!=0)
    {
    	in>>x>>y>>z>>m[1][1]>>m[1][2]>>m[1][3]>>n;
    	m[2][1]=m[3][2]=1;
    	m[2][2]=m[2][3]=m[3][1]=m[3][3]=0;
    	//exponentiere
    	n-=2;
        long long auxm[4][4]={{0, 0, 0, 0},{0, 1, 0, 0},{0, 0, 1, 0},{0, 0, 0, 1}};
        while(n>1)
        {
            if(n%2)
                mProduct(m,auxm,auxm);
            mProduct(m,m,m);
            n>>=1;
        }

        mProduct(m,auxm,m);
        out<<((m[1][1]* z) % MOD + (m[1][2] * y) % MOD + (m[1][3] * x) % MOD) % MOD << '\n';
        numTests--;
    }

	return 0;
}