Cod sursa(job #2252871)

Utilizator alisavaAlin Sava alisava Data 3 octombrie 2018 10:51:08
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>
#define mod 666013

using namespace std;

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

struct Matrix
{
    int a[6][6];
    int n,m;
};
Matrix A, U, I;
int x,y,z,a,b,c,n;
void Initializare()
{
    I.n=3;
    I.m=3;
    I.a[0][0]=I.a[1][1]=I.a[2][2]=1;
    A.n=1;
    A.m=3;
    A.a[0][0]=x;
    A.a[0][1]=y;
    A.a[0][2]=z;
    U.n=3;
    U.m=3;
    U.a[1][0]=U.a[2][1]=1;
    U.a[0][2]=a;
    U.a[1][2]=b;
    U.a[2][2]=c;
}
///0 0 A
///1 0 B
///0 1 C

Matrix MatMult(Matrix A,Matrix B)
{
    Matrix R;
    R.n=A.n;
    R.m=B.m;
    for(int i=0;i<R.n;i++)
        for(int j=0;j<R.m;j++)
        {
            R.a[i][j]=0;
            for(int k=0;k<=A.m;k++)
                R.a[i][j]+=(A.a[i][k]*B.a[k][j])%mod;
        }
    return R;
}
Matrix PowLog(Matrix X,int n)
{
    Matrix P = I;
    while (n)
    {
        if (n&1)
        {
            P=MatMult(P,X);
            n--;
        }
        X=MatMult(X,X);
        n>>=1;
    }
    return P;
}


int main()
{
    int T;
    fin>>T;
    for(int i=1;i<=T;i++)
    {
        fin>>x>>y>>z>>a>>b>>c>>n;
        Initializare();
        U=PowLog(U,n);
        fout<<A.a[0][0]<<" "<<A.a[0][1]<<" "<<A.a[0][2]<<"\n";
        A=MatMult(A,U);
    }


    return 0;
}