Cod sursa(job #1637709)

Utilizator armandpredaPreda Armand armandpreda Data 7 martie 2016 18:51:51
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>

using namespace std;

ifstream cin("iepuri.in");
ofstream cout("iepuri.out");

const int MOD=666013;
int t, x, y, z, a, b, c, n;
void mul(int A[][5], int B[][5])
{
    long long C[5][5];
    for(int i=1; i<=3; ++i)
        for(int j=1; j<=3; ++j)
            C[i][j]=(long long)A[i][1]*B[1][j]+A[i][2]*B[2][j]+A[i][3]*B[3][j];
    for(int i=1; i<=3; ++i)
        for(int j=1; j<=3; ++j)
            A[i][j]=C[i][j]%MOD;
}
int put(int n)
{
    int I[5][5], A[5][5];
    for(int i=1; i<=3; ++i)
        for(int j=1; j<=3; ++j)
            I[i][j]=(i==j);
    A[1][1]=a, A[1][2]=1, A[1][3]=0;
    A[2][1]=b, A[2][2]=0, A[2][3]=1;
    A[3][1]=c, A[3][2]=0, A[3][3]=0;
    for(int mask=1; mask<=n; mask<<=1)
    {
        if(mask&n)
            mul(I, A);
        mul(A, A);
    }
    long long rez=(long long)z*I[1][1]+y*I[2][1]+x*I[3][1];
    return rez%MOD;
}
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>x>>y>>z>>a>>b>>c>>n;
        cout<<put(n-2)<<'\n';
    }
    return 0;
}