Cod sursa(job #2071637)

Utilizator nic_irinaChitu Irina nic_irina Data 20 noiembrie 2017 20:44:26
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

void inm_matr(long long A[3][3], long long B[3][3])
{
    long long AB[3][3]={0,0};
    int i, j, k;
    for(i = 0; i < 3; i++)
        for(j = 0; j < 3; j++)
        {

            for(k = 0; k < 3; k++)
                AB[i][j] += ( (A[i][k] * B[k][j]) % 666013 );
            AB[i][j] %= 666013;
        }
    for(i = 0; i < 3; i++)
        for(j = 0; j < 3; j++)
            B[i][j] = AB[i][j];

}


void inm_clasica (long long A[3][3])
{
    long long Q[3][3] = {0, 0};
    int k, i, j;

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

        for(k=1; k<=7; k++)  ///alege puterea
        {
            inm_matr(Q, A);
            /*for(i = 0; i<3; i++ )
            {
                for(j = 0; j<3; j++)
                    cout<<M[i][j]<<" ";
                cout<<endl;
            }
            cout<<endl;*/
        }
}

int main()
{
    int T, X, Y, Z, A, B, C, i;
    long long N;
    fin>>T;
    for(i=1; i<=T; i++)
    {
        fin>>X>>Y>>Z>>A>>B>>C>>N;
        long long M[3][3]={0,0}, XYZ[3][3]={0,0};

                    M[0][1]=1;
                                M[1][2]=1;
        M[2][0]=C,  M[2][1]=B,  M[2][2]=A;

        XYZ[0][0]=X;
        XYZ[1][0]=Y;
        XYZ[2][0]=Z;

        while ( N >1  )
        {
            if(N%2 == 0)
            {
                inm_matr(M, M);
                N /= 2;
            }
            else
            {
                inm_matr(M, XYZ);
                N--;
            }
        }
        inm_matr(M, XYZ);
        fout<<XYZ[0][0]<<endl;
    }
    fin.close();
    fout.close();
    return 0;
}