Cod sursa(job #2339094)

Utilizator cristina-criCristina cristina-cri Data 8 februarie 2019 13:00:53
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <cstdio>
#define MOD 666013

using namespace std;

int t, n, x, y, z, a, b,c;
int ie[5][5], m[5][5], rez[5][5];

void copiere(int a[5][5], int c[5][5])
{
    for(int i=1; i<=3; i++)
    {
        for(int j=1; j<=3; j++)
            a[i][j]=c[i][j];
    }
}

void zero(int m[5][5])
{
    for(int i=1; i<=3; i++)
    {
        for(int j=1; j<=3; j++)
            m[i][j]=0;
    }
}

void inmultire(int a[5][5], int b[5][5])
{
    int c[5][5]={0};
    for(int i=1; i<=3; i++)
    {
        for(int j=1; j<=3; j++)
        {
            for(int nr=1; nr<=3; nr++)
                c[i][j]=(c[i][j]+((1LL*a[i][nr]*b[nr][j])%MOD))%MOD;
        }
    }
    copiere(a, c);
}



void ridicare(int putere)
{
    copiere(rez, m);
    putere--;
    while(putere)
    {
        if(putere%2)
        {
            putere--;
            inmultire(rez, m);
        }
        putere/=2;
        inmultire(m, m);
    }
}

int main()
{

    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);

    scanf("%d", &t);


    for(int i=1; i<=t; i++)
    {
        zero(m);
        zero(ie);
        scanf("%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &n);
        m[2][3]=1;
        m[1][2]=1;
        m[1][1]=a;
        m[2][1]=b;
        m[3][1]=c;
        ie[1][1]=z;
        ie[1][2]=y;
        ie[1][3]=x;
        ridicare(n-2);
        inmultire(ie, rez);
        printf("%d\n", ie[1][1]);
        zero(m);
        zero(ie);
        zero(rez);
    }

    return 0;
}