Cod sursa(job #60500)

Utilizator sealTudose Vlad seal Data 14 mai 2007 21:22:29
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<stdio.h>
#include<string.h>
#define Mod 666013
int x,y,z,a,b,c,n;
long long A[9],M[9],R[9];

void mul(long long A[])
{
    R[0]=(A[0]*M[0]+A[1]*M[3]+A[2]*M[6])%Mod;
    R[1]=(A[0]*M[1]+A[1]*M[4]+A[2]*M[7])%Mod;
    R[2]=(A[0]*M[2]+A[1]*M[5]+A[2]*M[8])%Mod;

    R[3]=(A[3]*M[0]+A[4]*M[3]+A[5]*M[6])%Mod;
    R[4]=(A[3]*M[1]+A[4]*M[4]+A[5]*M[7])%Mod;
    R[5]=(A[3]*M[2]+A[4]*M[5]+A[5]*M[8])%Mod;

    R[6]=(A[6]*M[0]+A[7]*M[3]+A[8]*M[6])%Mod;
    R[7]=(A[6]*M[1]+A[7]*M[4]+A[8]*M[7])%Mod;
    R[8]=(A[6]*M[2]+A[7]*M[5]+A[8]*M[8])%Mod;

    memcpy(A,R,sizeof(R));
}

long long solve()
{
    unsigned i;

    A[0]=1; A[1]=0; A[2]=0; A[3]=0; A[4]=1; A[5]=0; A[6]=0; A[7]=0; A[8]=1;
    M[0]=0; M[1]=0; M[2]=c; M[3]=1; M[4]=0; M[5]=b; M[6]=0; M[7]=1; M[8]=a;

    n-=2;
    if(n&1)
	memcpy(A,M,sizeof(R));

    for(i=2;i<=n;i<<=1)
    {
	mul(M);
	if(n&i)
	    mul(A);
    }

    return (x*A[2]+y*A[5]+z*A[8])%Mod;
}

int main()
{
    int t;

    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    scanf("%d",&t);

    while(t--)
    {
	scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
	printf("%lld\n",solve());
    }

    return 0;
}