Cod sursa(job #1090700)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 22 ianuarie 2014 23:01:12
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <cstdio>
#define mod 666013
using namespace std;

struct matrice {
    int a11,a12,a13,a21,a22,a23,a31,a32,a33;
};

matrice nul;
int t,x,y,z,a,b,c,n;

inline matrice multmat(matrice &a,matrice &b) {
    matrice r;
    r.a11 = a.a11*b.a11 + a.a12*b.a21 + a.a13*b.a31;
    r.a12 = a.a11*b.a12 + a.a12*b.a22 + a.a13*b.a32;
    r.a13 = a.a11*b.a13 + a.a12*b.a23 + a.a13*b.a33;
    r.a21 = a.a21*b.a11 + a.a22*b.a21 + a.a23*b.a31;
    r.a22 = a.a21*b.a12 + a.a22*b.a22 + a.a23*b.a32;
    r.a23 = a.a21*b.a13 + a.a22*b.a23 + a.a23*b.a33;
    r.a31 = a.a31*b.a11 + a.a32*b.a21 + a.a33*b.a31;
    r.a32 = a.a31*b.a12 + a.a32*b.a22 + a.a33*b.a32;
    r.a32 = a.a31*b.a13 + a.a32*b.a23 + a.a33*b.a33;
    return r;
}

matrice putlog(matrice a,int p) {
    if (p == 1) return a;
    matrice aux = putlog(a,p/2);
    matrice r = multmat(aux,aux);
    if (p%2 == 1) {
        aux = r;
        r = multmat(aux,a);
    }
    return r;
}

int main() {
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    scanf("%d",&t);
    while (t--) {
        scanf("%d %d %d %d %d %d %d",&x,&y,&z,&a,&b,&c,&n);
        matrice init = nul;
        init.a11 = a;
        init.a12 = b;
        init.a13 = c;
        init.a21 = 1;
        init.a32 = 1;
        init = putlog(init,n-2);
        matrice s = nul;
        s.a11 = z;
        s.a21 = y;
        s.a31 = x;
        matrice x = multmat(init,s);
        printf("%d\n",x.a11);
    }
    return 0;
}