Cod sursa(job #1851168)

Utilizator alexkolumeRadulescu Ioan-Alexandru alexkolume Data 19 ianuarie 2017 14:19:04
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <cstring>
using namespace std;

int N, X, Y, Z, A, B, C;
int temp[3][3], sol[3][3], aux[3][3];

void initializare()
{
    sol[0][0] = X; sol[0][1] = Y; sol[0][2] = Z;
    temp[0][0] = 0; temp[0][1] = 0; temp[0][2] = C;
    temp[1][0] = 1; temp[1][1] = 0; temp[1][2] = B;
    temp[2][0] = 0; temp[2][1] = 1; temp[2][2] = A;
}

void produs(int a[3][3], int b[3][3], int c[3][3])
{
    int i,j,k;

    for(i=0; i<3; i++)
        for(j=0; j<3; j++)
            c[i][j] = 0;

    for (i = 0; i < 3; ++i)
        for (j = 0; j < 3; ++j)
            for (k = 0; k < 3; ++k)
                c[i][j] = (c[i][j] + (long long)1 * a[i][k] * b[k][j]) % 666013;

    for(i=0; i<3; i++)
        for(j=0; j<3; j++)
            a[i][j] = c[i][j];
}



void exponentiere(int N)
{
    while (N > 0)
    {
        if (N % 2 == 1)
            produs(sol, temp, aux);
        N = N/2;
        produs(temp, temp, aux);
    }
}

int main()
{
    int T, i;
    i=0;
    ifstream fin("iepuri.in");
    ofstream fout("iepuri.out");
    fin >> T;

    while(i<T)
    {
        fin >> X >> Y >> Z >> A >> B >> C >> N;
        initializare();
        exponentiere(N - 2);
        fout << sol[0][2] << endl;
        i++;
    }
    return 0;
}