Cod sursa(job #854221)

Utilizator ioanapopaPopa Ioana ioanapopa Data 12 ianuarie 2013 22:16:41
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<cstdio>
#include<cstdlib>
#define MOD 666013
using namespace std;

int fin[3][3],matrice[3][3];
void inmultire(int fin[][3],int matrice[][3])
{
    int intermediar[3][3];
	for(int i=0;i<3;++i)
		for(int j=0; j<3;++j)
			intermediar[i][j]=0;
    for(int i=0;i<3;++i)
		for(int j=0;j<3;++j)
			for(int k=0;k<3;++k)
				intermediar[i][j]=(intermediar[i][j]+1ll*fin[i][k]*matrice[k][j])%MOD;
    for(int i=0;i<=2;++i)
		for(int j=0;j<=2;++j)
			fin[i][j]=intermediar[i][j];
}
void exponent(int fin[][3],int p)
{
    while(p)
		{
			if(p&1)
			{
				inmultire(fin,matrice);
			}
		p/=2;
		inmultire(matrice,matrice);
		}
}
int main()
{
	int a,b,c,x,y,z,n,nr;
	freopen("iepuri.in","r",stdin);
	freopen("iepuri.out","w",stdout);
	
    scanf("%d",&nr);
    while(nr)
    {
        scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
        for(int i=0;i<=2;++i)
        for(int j=0;j<=2;++j)
        if(i==j)
        fin[i][j]=1;
        else
        fin[i][j]=0;
        matrice[0][0]=a;
        matrice[0][1]=b;
        matrice[0][2]=c;
        matrice[1][0]=1;
        matrice[1][1]=0;
        matrice[1][2]=0;
        matrice[2][0]=0;
        matrice[2][1]=1;
        matrice[2][2]=0;

        exponent(fin,n-2);
		
        int raspuns=(1ll*fin[0][0]*z%MOD+1ll*fin[0][1]*y%MOD+1ll*fin[0][2]*x%MOD)%MOD;
		printf("%d\n",raspuns);
		nr--;
    }
    return 0;
}