Cod sursa(job #917751)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 18 martie 2013 12:12:29
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include<fstream>
#define NMAX 4
#define MOD 666013

using namespace std;

ifstream f("iepuri.in");
ofstream g("iepuri.out");

long long T, n, x[NMAX], A, B, C, a[NMAX][NMAX], p[NMAX][NMAX], aux[NMAX][NMAX], REZ;

void Initializeaza()
{
    int i, j;

    for (i=1; i<4; ++i)
        for (j=1; j<4; ++j) a[i][j]=p[i][j]=0;

    p[1][1]=p[2][2]=p[3][3]=a[2][1]=a[3][2]=1;

    a[1][3]=C; a[2][3]=B; a[3][3]=A;
}

void Zerorizeaza()
{
    int i, j;

    for (i=1; i<4; ++i)
        for (j=1; j<4; ++j) aux[i][j]=0;
}

void Inmulteste()
{
    int i, j, k;

    Zerorizeaza();

    for (i=1; i<4; ++i)
        for (k=1; k<4; ++k)
            for (j=1; j<4; ++j)
                aux[i][k]=(aux[i][k]+(a[i][j]*p[j][k])%MOD)%MOD;

    for (i=1; i<4; ++i)
        for (j=1; j<4; ++j) p[i][j]=aux[i][j];
}

void Ridica()
{
    int i, j, k;

    Zerorizeaza();

    for (i=1; i<4; ++i)
        for (k=1; k<4; ++k)
            for (j=1; j<4; ++j)
                aux[i][k]=(aux[i][k]+(a[i][j]*a[j][k])%MOD)%MOD;

    for (i=1; i<4; ++i)
        for (j=1; j<4; ++j) a[i][j]=aux[i][j];
}


int main()
{
    f>>T;

    while (T--)
    {
        f>>x[1]>>x[2]>>x[3]>>A>>B>>C>>n;

        n-=2;

        Initializeaza();

        while (n)
        {
            if (n%2!=0)
            {
                --n;
                Inmulteste();
            }
            else
            {
                n/=2;
                Ridica();
            }
        }

        REZ=((x[1]*p[1][3])%MOD+(x[2]*p[2][3])%MOD+(x[3]*p[3][3])%MOD)%MOD;

        g<<REZ<<"\n";
    }

    f.close();
    g.close();
    return 0;
}