Cod sursa(job #2488317)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 6 noiembrie 2019 18:10:44
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
//#pragma GCC optimize ("O3")
//#pragma GCC target ("sse4")

#include <bits/stdc++.h>

using namespace std;

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

static const int MOD = 666013;

int m[3][3] , sol[3][3], aux[3][3];

void multiply_1()
{
    memset(aux,0,sizeof(aux));

    for(int i = 0; i< 3; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            for(int l = 0; l < 3; ++l)
            {
                aux[i][j] = (1LL * aux[i][j] + sol[i][l] * m[l][j] * 1LL) % MOD;
            }
        }
    }
    memcpy(sol,aux,sizeof(sol));
}

void multiply_2()
{
    memset(aux,0,sizeof(aux));

    for(int i = 0; i< 3; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            for(int l = 0; l < 3; ++l)
            {
                aux[i][j] = (1LL * aux[i][j] + m[i][l] * m[l][j] * 1LL) % MOD;
            }
        }
    }
    memcpy(m,aux,sizeof(m));
}

void calc(int p)
{
    

    for(int i = 1; i<= p; i<<=1)
    {
        if(i&p)
        {
            multiply_1();
        }
        multiply_2();
    }
}

int main()
{

    int t;
    fin >> t;
    while(t--)
    {
        int x,y,z,a,b,c,n;
        fin >> x >> y >> z >> a >> b >> c >> n;
        memset(m,0,sizeof(m));
        memset(sol,0,sizeof(sol));
        sol[2][0] = x;
        sol[2][1] = y;
        sol[2][2] = z;


        m[1][0] = m[2][1] = 1;
        m[0][2] = c;
        m[1][2] = b;
        m[2][2] = a;
        calc(n-2);
        fout << sol[2][2] << " ";
    }

    return 0;
}