Cod sursa(job #1174273)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 22 aprilie 2014 14:29:05
Problema Iepuri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <cstdio>
#include <cstring>
#define mod 666013
using namespace std;
int t, x, y, z, n, a, b, c, A[4][4], Z[4][4];
void log_pw(int x, int m[][4]);
void multi(int a[][4], int b[][4], int c[4][4]);
int main()
{
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d%d%d", &x, &y, &z);
        scanf("%d%d%d", &a, &b, &c);
        scanf("%d", &n);
        memset(A, 0, sizeof(A));
        A[2][0]=x;
        A[2][1]=y;
        A[2][2]=z;
        Z[1][0]=1;
        Z[2][1]=1;
        Z[0][2]=c;
        Z[1][2]=b;
        Z[2][2]=a;
        log_pw(n-2, A);
        printf("%d\n", A[2][2]);
    }
    return 0;
}
void log_pw(int x, int m[][4])
{
    int i, aux[4][4], b[4][4];
    memcpy(b, Z, sizeof(Z));
    for(i=0;(1<<i)<=x;i++)
    {
        if(x&(1<<i))
        {
            memset(aux, 0, sizeof(aux));
            multi(m, b, aux);
            memcpy(m, aux, sizeof(aux));
        }
        memset(aux, 0, sizeof(aux));
        multi(b, b, aux);
        memcpy(b, aux, sizeof(aux));
    }
}
void multi(int a[][4], int b[][4], int c[][4])
{
    int i, j, k;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            for(k=0;k<3;k++)
                c[i][j]=(c[i][j]+1LL*a[i][k]*b[k][j])%mod;
}