Cod sursa(job #3159195)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 20 octombrie 2023 21:21:48
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda HLO 2023 - Cls 11-12 - Tema 0 Marime 1.72 kb
#include <bits/stdc++.h>

#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

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

const int MOD=666013;
const int NMAX=3;

int mat[NMAX][NMAX];
int aux[NMAX][NMAX];
int init[NMAX][NMAX];

int x,y,z,a,b,c,n;

void inmultire(int a[3][3],int b[3][3])
{
    int x,i,j;
    int aux2[3][3];
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            aux2[i][j]=0;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            for(x=0;x<3;x++)
                aux2[i][j]=(aux2[i][j]+a[i][x]*b[x][j])%MOD;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            aux[i][j]=aux2[i][j];
}

void lgput(int b)
{
    if(b==0)
        return ;
    else
    {
        if(b%2==0)
        {
            lgput(b/2);
            inmultire(aux,aux);
        }
        else
        {
            lgput(b/2);
            inmultire(aux,aux);
            inmultire(mat,aux);
        }
    }
}

void reset()
{
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            init[i][j]=mat[i][j]=aux[i][j]=0;
    aux[0][0]=aux[1][1]=aux[2][2]=1;
    mat[0][2]=c;
    mat[1][2]=b;
    mat[2][2]=a;
    mat[1][0]=mat[2][1]=1;
    init[0][0]=x;
    init[0][1]=y;
    init[0][2]=z;
}

int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);

    int t;
    fin>>t;
    while(t--)
    {
        fin>>x>>y>>z>>a>>b>>c>>n;
        reset();
        n-=2;
        lgput(n);
        inmultire(init,aux);
        fout<<aux[0][2]<<"\n";
    }
    fin.close();
    fout.close();
    return 0;
}