Cod sursa(job #3326946)

Utilizator andreiciocanCiocan Andrei andreiciocan Data 1 decembrie 2025 15:28:05
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.67 kb
#include <fstream>

using namespace std;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
const int M=666013,N=3;
int rez[4][4];

void produs(int a[N][N], int b[N][N])
{
    int aux[N][N] = {{0, 0}, {0, 0}};
    for (int i= 0; i < N; i++)
    {
        for (int k = 0; k < N; k++)
        {
            for (int j = 0; j < N; j++)
            {
                aux[i][k] = (aux[i][k] + (long long)a[i][j] * b[j][k] % M) % M;
            }
        }
    }
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            a[i][j] = aux[i][j];
        }
    }
}/*
void ridicare(int I[4][4],int exp)
{
    for(int i=1;i<=3;i++)
    {
        for(int j=1;j<=3;j++)
        {
            if(i==j)
                rez[i][j]=1;
            else
                rez[i][j]=0;
        }
    }
    int aux[4][4];
    while(exp!=0)
    {
        if(exp%2==0)
        {
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    int s=0;
                    for(int k=1;k<=3;k++)
                    {
                        s=(s+1LL*I[i][k]*I[k][j])%M;
                    }
                    aux[i][j]=s;
                }
            }
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    I[i][j]=aux[i][j];
                }
            }
            exp/=2;
        }
        else
        {
            exp--;
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    int s=0;
                    for(int k=1;k<=3;k++)
                    {
                        s=(s+1LL*rez[i][k]*I[k][j])%M;
                    }
                    aux[i][j]=s;
                }
            }
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    rez[i][j]=aux[i][j];
                }
            }
        }

    }
}*/
int main()
{
    int t;
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        int x,y,z,a,b,c,n;
        cin>>x>>y>>z>>a>>b>>c>>n;
        n-=2;
        int p[N][N] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
        int q[N][N] = {{a, 1, 0}, {b, 0, 1}, {c, 0, 0}};
        while (n!=0)
        {
            if(n%2!=0)
            {
                produs(p, q);
            }
            produs(q,q);
            n/=2;
        }
        int suma = ((long long)z * p[0][0] % M + (long long)y * p[1][0] % M +
                   (long long)p[2][0] * x % M) % M;
        cout << suma << "\n";
    }
    return 0;
}