Cod sursa(job #715751)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 17 martie 2012 18:07:34
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream>
#define dim 10000
#define mod  666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long  m[4][4],rez[4][4],aux[4][4];
int t;
int x,y,z,a,b,c,n;
void copy(long long A[4][4]){
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
			A[i][j]=aux[i][j];
}
void multi(long long A[4][4],int n,int m,long long B[4][4],int m1,int p){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=p;j++){
			aux[i][j]=0;
			for(int k=1;k<=m;k++){
				aux[i][j]=aux[i][j]+ (long long )(A[i][k]*B[k][j])%mod;
			}
		}
	}
	copy(A);
	
}
void  lgput(long long A[4][4],long long  P[4][4],int p){
	
	while(p){
		if(p%2==1){
			multi(P,3,3,A,3,3);

		}
		multi(A,3,3,A,3,3);
		
		p/=2;
	}
	
}    
int main (){
	f>>t;
	
	while(t){
		f>>x>>y>>z>>a>>b>>c>>n;
		m[1][1] = m[1][3] = m[2][1] = m[2][2] = 0;
		m[1][2] = m[2][3] = 1;
		m[3][1] = c;
		m[3][2] = b;
		m[3][3] = a;
		rez[1][1]=rez[2][2]=rez[3][3]=1;
		rez[1][2]=rez[1][3]=rez[2][1]=rez[2][3]=rez[3][1]=rez[3][2]=0;
		lgput(m,rez,n);
		g<<rez[1][1]*x + rez[1][2]*y + rez[1][3]*z<<"\n";
		--t;
	}
	return 0;
}