Cod sursa(job #1487582)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 17 septembrie 2015 07:36:39
Problema Iepuri Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<stdio.h>
long long e[3][3],d[3][3],f[3][3],g[3][3];
int a,b,c,x,y,z,k,t,i,v[80],n,j,l,r;
int main() {
	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),e[0][0]=e[0][2]=e[1][0]=e[1][1]=0,e[0][1]=e[1][2]=1,e[2][0]=c,e[2][1]=b,e[2][2]=a;
		for(l=0;l<3;l++)
        for(j=0;j<3;j++)
        for(d[l][j]=r=0;r<3;r++)
            d[l][j]=((d[l][j]%666013)+(((e[l][r]%666013)*(e[r][j]%666013))%666013))%666013;
		for(k=0,n-=2;n;v[++k]=n&1,n>>=1);
       	for(i=k-1;i;i--) {
       		for(l=0;l<3;l++)
			for(j=0;j<3;j++)
    		for(f[l][j]=r=0;r<3;r++)
        		f[l][j]=((f[l][j]%666013)+(((e[l][r]%666013)*(d[r][j]%666013))%666013))%666013;
			if(!v[i])
				for(l=0;l<3;l++)
				for(j=0;j<3;j++)
    			for(g[l][j]=r=0;r<3;r++)
        			g[l][j]=((g[l][j]%666013)+(((e[l][r]%666013)*(e[r][j]%666013))%666013))%666013;
            else
            	for(l=0;l<3;l++)
				for(j=0;j<3;j++)
    			for(g[l][j]=r=0;r<3;r++)
        			g[l][j]=((g[l][j]%666013)+(((d[l][r]%666013)*(d[r][j]%666013))%666013))%666013;
            for(j=0;j<3;j++)
			for(l=0;l<3;l++)
      			d[j][l]=f[j][l],e[j][l]=g[j][l];
    	}
       	printf("%d\n",((((e[2][0]%666013)*(x%666013))%666013)+(((e[2][1]%666013)*(y%666013))%666013)+(((e[2][2]%666013)*(z%666013))%666013))%666013);
	}
}