Cod sursa(job #3158161)

Utilizator AlexTrTrambitas Alexandru-Luca AlexTr Data 17 octombrie 2023 21:39:37
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <fstream>
using namespace std;
int T, i, j,  x, y, z, a, b, c, n, exp, k, ii, jj, kk;
long long intermed[4][4];
void prod(long long a[][4], long long b[][4], long long c[][4], int n, int m, int p)
{
    int i, j, k;
    for (i=1; i<=n; ++i)
        for (j=1; j<=p; ++j)
            for (k=1; k<=m; ++k)
                c[i][j] += (1LL*(a[i][k]*b[k][j])%666013)%666013;
    for (i=1; i<=n; ++i)
        for (j=1; j<=p; ++j)
        {
            b[i][j] = c[i][j];
            c[i][j] = 0;
        }


}



int main()
{
    ifstream f("iepuri.in");
    ofstream g("iepuri.out");
    f >> T;
    for (k=1; k<=T; ++k)
    {
        f >> x >> y >> z;
        f >> a >> b >> c;
        f >> n;
        exp = n-2;
        long long baza[4][4]    { {-1, -1, -1, -1},
            {-1, 0, 1, 0},
            {-1, 0, 0, 1},
            {-1, c, b, a}
        };
        long long rez[4][4]     { {-1, -1, -1, -1},
            {-1, 1, 0, 0},
            {-1, 0, 1, 0},
            {-1, 0, 0, 1}
        };
        while (exp>=1)
        {
            if (exp%2==0)
            {
                prod(baza, baza, intermed, 3, 3, 3);
                exp/=2;

            }
            else
            {
                prod(baza, rez, intermed, 3, 3, 3);
                --exp;

            }

        }
        int mat[4][2] {{-1, -1},
            {-1, x},
            {-1, y},
            {-1, z}

        };


        g<<((rez[3][1]*x)%666013+(rez[3][2]*y)%666013+(rez[3][3]*z)%666013)%666013<<'\n';
        for (i=1; i<=3; ++i)
            for (j=1; j<=3; ++j)
                intermed[i][j] = 0;


    }

    f.close();
    g.close();




}