Cod sursa(job #2491821)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 13 noiembrie 2019 11:01:03
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MOD = 666013;
long long b[3][3],a[3][3],rasp[3][3],c[3][3],aux[3][3];
long long n,X,Y,Z,A,B,C;

void reset_abc()
{
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            if(i==j) b[i][j]=1;
            else     b[i][j]=0;
    a[1][1]=A;
    a[1][2]=B;
    a[1][3]=C;
    a[2][1]=a[3][2]=1;
    a[2][2]=a[2][3]=a[3][1]=a[3][3]=0;
    c[1][1]=Z;
    c[2][1]=Y;
    c[3][1]=X;
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            rasp[i][j]=0;
}

long long lgput(long long put)
{
    while(put!=0)
    {
        if(put%2==1)
        {
            for(int i=1;i<=3;i++)
                for(int j=1;j<=3;j++)
                    aux[i][j]=0;
              for(int i=1;i<=3;i++)
                for(int j=1;j<=3;j++)
                    for(int k=1;k<=3;k++)
                        aux[i][j]=(aux[i][j]+b[i][k]*a[k][j])%MOD;
            for(int i=1;i<=3;i++)
                for(int j=1;j<=3;j++)
                        b[i][j]=aux[i][j];
            put--;
        }
        else if(put%2==0)
        {
            for(int i=1;i<=3;i++)
                for(int j=1;j<=3;j++)
                {
                    aux[i][j]=a[i][j];
                    a[i][j]=0;
                }
            for(int i=1;i<=3;i++)
                for(int j=1;j<=3;j++)
                    for(int k=1;k<=3;k++)
                        a[i][j]=(a[i][j]+aux[i][k]*aux[k][j])%MOD;
            put/=2;
        }
    }
}

int main()
{

    long long T;
    fin >> T;
    for(int t=1;t<=T;t++)
    {
        fin >> X >> Y >> Z >> A >> B >> C >> n;
        reset_abc();
        lgput(n-2);
        for(int i=1;i<=3;i++)
            for(int j=1;j<=1;j++)
                for(int k=1;k<=3;k++)
                    rasp[i][j]=(rasp[i][j]+b[i][k]*c[k][j])%MOD;
        fout << rasp[1][1]%MOD << '\n';
    }

    return 0;
}