Cod sursa(job #1092986)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 27 ianuarie 2014 17:32:49
Problema Iepuri Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <cstring>
#define X 666013
#define D 4
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");

int t,x,y,z,a,b,c,N,Z[D][D];

void Multiplication(int A[][D],int B[][D],int C[][D])
{
    int aux[D][D];
    memset(aux,0,sizeof(aux));
    for(int i=1;i<=3;++i)
        for(int j=1;j<=3;++j)
            for(int k=1;k<=3;++k)
                aux[i][j]=(aux[i][j]+1LL*A[i][k]*B[k][j]) % X;
    memcpy(C,aux,sizeof(aux));
}

void MatrixPower(int Z[][D],int K)
{
    int aux[D][D];
    aux[1][1]=1,aux[1][2]=0,aux[1][3]=0;
    aux[2][1]=0,aux[2][2]=1,aux[2][3]=0;
    aux[3][1]=0,aux[3][2]=0,aux[3][3]=1;
    while(K!=1)
        if(K % 2==0)Multiplication(Z,Z,Z),K/=2;
            else    Multiplication(aux,Z,aux),--K;
    Multiplication(Z,aux,Z);
}


void Solve()
{
    f>>x>>y>>z>>a>>b>>c>>N;
    Z[1][1]=0,Z[1][2]=1,Z[1][3]=0;
    Z[2][1]=0,Z[2][2]=0,Z[2][3]=1;
    Z[3][1]=c,Z[3][2]=b,Z[3][3]=a;
    MatrixPower(Z,N-2);
    g<<(z*Z[3][3]+y*Z[3][2]+x*Z[3][1]) % X<<'\n';
}
int main()
{
    f>>t;
    for(int i=1;i<=t;i++)Solve();
    f.close();g.close();
    return 0;
}