Cod sursa(job #1716432)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 12 iunie 2016 19:24:20
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>
#include <cstring>
#define LL long long

using namespace std;

const int mod = 666013;

class matrix
{
public:
    LL a[3][3];
    matrix(){memset(a, 0, sizeof(a));}
    void operator *= (const matrix &B)
    {
        matrix C;
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                for(int k=0;k<3;k++)
                    C.a[i][j]=(C.a[i][j]+a[i][k]*B.a[k][j])%mod;
        *this=C;
    }
};
matrix lgput(matrix &A, LL b)
{
    matrix p;
    p.a[0][0] = p.a[1][1] = p.a[2][2] = 1;
    while(b)
    {
        if(b&1)p*=A;
        A*=A;
        b>>=1;
    }
    return p;
}

int main()
{
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int k;
        int x, y, z, a, b, c;
        scanf("%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &k);
        matrix A;
        A.a[1][0] = A.a[2][1] = 1;
        A.a[0][2] = c;
        A.a[1][2] = b;
        A.a[2][2] = a;
        A = lgput(A, k);
        int val = (x*A.a[0][0]+y*A.a[1][0]+z*A.a[2][0])%mod;
        printf("%d\n", val);
    }
    return 0;
}