Cod sursa(job #2343365)

Utilizator razvanradulescuRadulescu Razvan razvanradulescu Data 13 februarie 2019 22:06:21
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <cstdio>
#define MOD 666013
using namespace std;

void cpy(int a[5][5], int b[5][5])
{
    for(int i = 0; i<3; i++)
    {
        for(int j = 0; j<3; j++)
        {
            a[i][j] = b[i][j];
        }
    }
}

void inm(int a[5][5], int b[5][5])
{
    int c[5][5] = {0};
    for(int i = 0; i<3; i++)
    {
        for(int j = 0; j<3; j++)
        {
            for(int k = 0; k<3; k++)
            {
                c[i][j] = (1ll * c[i][j] + 1ll * a[i][k] * b[k][j])%MOD;
            }
        }
    }
    cpy(a, c);
}

void ridPutLog(int a[5][5], int put)
{
    int r[5][5];
    cpy(r, a);
    put--;
    while(put!=0)
    {
        if(put&1)
            inm(r, a);
        inm(a, a);
        put/=2;
    }
    cpy(a, r);
}

void rez()
{
    int a, b, c, x, y, z, n, t;
    scanf("%d", &t);
    for(int i = 0; i<t; i++)
    {
        scanf("%d %d %d %d %d %d %d", &a, &b, &c, &x, &y, &z, &n);
        int m[5][5] = {{a, 1, 0}, {b, 0, 1}, {c, 0, 0}};
        ridPutLog(m, n-2);
        printf("%d\n", (int)((1ll * z * m[0][0] + 1ll * y * m[1][0] + 1ll * x * m[2][0])%MOD));
    }
}

int main()
{
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    rez();
    return 0;
}