Cod sursa(job #1513424)

Utilizator armandpredaPreda Armand armandpreda Data 29 octombrie 2015 15:28:39
Problema Iepuri Scor 90
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])
{
    int C[5][5];
    for(int i=1; i<=3; ++i)
        for(int j=1; j<=3; ++j)
            C[i][j]=(1ll*A[i][1]*B[1][j]%MOD+1ll*A[i][2]*B[2][j]%MOD+1ll*A[i][3]*B[3][j]%MOD)%MOD;
    for(int i=1; i<=3; ++i)
        for(int j=1; j<=3; ++j)
            A[i][j]=C[i][j];
}
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);
    }
    return (1ll*z*I[1][1]%MOD+1ll*y*I[2][1]%MOD+1ll*x*I[3][1]%MOD)%MOD;
}
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>x>>y>>z>>a>>b>>c>>n;
        cout<<put(n-2)<<'\n';
    }
    return 0;
}