Cod sursa(job #2337062)

Utilizator BungerNadejde George Bunger Data 5 februarie 2019 20:50:41
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");
const int MOD=666013;
struct Mat
{
    long long M[3][3];
};
const Mat matUnit=
{
    1,0,0,
    0,1,0,
    0,0,1
};
long long T,X,Y,Z,A,B,C,N;

Mat produs (Mat a,Mat b)
{
    Mat aux;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            aux.M[i][j]=0;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            for(int k=0;k<3;k++)
            aux.M[i][j]=aux.M[i][j]+a.M[i][k]*b.M[k][j];
    return aux;
}
Mat pow(Mat mat,long long n)
{
    if(n==0) return matUnit;
    if(n%2==0) return pow(produs(mat,mat),n/2);
    return produs(mat,pow(produs(mat,mat),n/2));
}
void solve()
{
    Mat AR,matInit;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            AR.M[i][j]=matInit.M[i][j]=0;
    AR.M[0][0]=X;
    AR.M[0][1]=Y;
    AR.M[0][2]=Z;
    matInit.M[0][2]=C;
    matInit.M[1][2]=B;
    matInit.M[2][2]=A;
    matInit.M[1][0]=1;
    matInit.M[2][1]=1;

    fout<<produs(AR,pow(matInit,N-2)).M[0][2]<<'\n';
}
void read()
{
    fin>>T;
    while(T--)
    {
        fin>>X>>Y>>Z>>A>>B>>C>>N;
        solve();
    }
}
int main()
{
    read();
    return 0;
}