Cod sursa(job #3039883)

Utilizator geo_uwuManolachi George geo_uwu Data 28 martie 2023 23:04:11
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
using namespace std;
#define int long long
ifstream f("iepuri.in");
ofstream g("iepuri.out");
const int Mod=666013;
int t, x, y, z, a, b, c, n;

void inmultire(int A[4][4], int B[4][4])
{
    int v[10], cnt=1;
    for(int i=1; i<4; i++)
        for(int j=1; j<4; j++)
        {
            v[cnt]=0;
            for(int k=1; k<4; k++)
                v[cnt]+=A[i][k]*B[k][j];
                v[cnt]%=Mod;
            cnt++;
        }
    cnt=1;
    for(int i=1; i<4; i++)
        for(int j=1; j<4; j++)
            A[i][j]=v[cnt++];
}

void putere(int F[4][4], int n)
{
    if (n == 0 || n == 1)
        return;
    int M[4][4] = {{0, 0, 0, 0},
                   {0, a, b, c},
                   {0, 1, 0, 0},
                   {0, 0, 1, 0}};

    putere(F, n / 2);
    inmultire(F, F);
    if (n % 2 != 0)
        inmultire(F, M);
}

main()
{
    f>>t;
    while(t--)
    {
        f>>x>>y>>z>>a>>b>>c>>n;
        int A[4][4]={{0, 0, 0, 0},
                     {0, a, b, c},
                     {0, 1, 0, 0},
                     {0, 0, 1, 0}};

        putere(A, n-2);
        int rez=A[1][1]*z+A[1][2]*y+A[1][3]*x;
        g<<rez%Mod<<'\n';
    }
}