Cod sursa(job #1516977)

Utilizator rangerChihai Mihai ranger Data 3 noiembrie 2015 19:15:24
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb

# include <bits/stdc++.h>

using namespace std;

struct matrice {
         int n,m;
         long long a[5][5];
         matrice () {
           for (int i=1;i<5;++i)
            for (int j=1;j<5;j++) a[i][j] = 0;
         }
} init, M;

int tests;
int n;
int A, B, C, X , Y , Z;
const int MOD = 666013;


ifstream fi("iepuri.in");
ofstream fo("iepuri.out");

matrice mult(matrice A, matrice B) {

    matrice C;
    C.n = A.n; C.m = B.m;

    for (int i=1;i<=C.n;++i)
    for (int j=1;j<=C.m;j++) {
        C.a[i][j] = 0;
        for (int k=1;k<=A.m;k++)
        {
            C.a[i][j] += (A.a[i][k] * B.a[k][j]) % MOD;
            C.a[i][i] %= MOD;
        }
    }
    return C;
}

matrice pow(matrice M, int n)
{
    if (n==1) return M;
    if (n & 1) return mult(pow(M, n-1), M);
    matrice Aux = pow(M, n/2);
    return mult(Aux, Aux);
}
void afis(matrice A) {

   fo << "\n";
   fo << A.n << "  " << A.m << "\n";
   for(int i=1;i<=A.n;i++,cout<<"\n")
    for(int j=1;j<=A.m;j++) cout <<A.a[i][j] << " ";
   cout<<"\n";
}
int main()
{
    fi >> tests;

    while (tests--) {

        for (int i=1;i<=3;++i) init.a[1][i]=0;
        for(int i=1;i<=3;++i) for (int j=1;j<=3;j++) M.a[i][j] = 0;

        fi >> X >> Y >> Z >> A >> B >> C >> n;
        init.n = 1; init.m = 3;
        init.a[1][1] = X; init.a[1][2] = Y; init.a[1][3] = Z;
        M.n = M.m = 3;

        M.a[2][1] = M.a[3][2] = 1;
        M.a[1][3] = C; M.a[2][3] = B; M.a[3][3] = A;
         // fo << pow(M, n).a[1][1] << "\n";

        matrice CS = pow(M,n);
       // fo << CS.a[1][1] << "\n";
       // fo << CS.n << " " << CS.m << "\n";
       // fo << init.n << " " << init.m << "\n";
       // afis(CS);
        CS = mult(init, CS);
        fo << CS.a[1][1] << "\n";
    }
    return  0;
}