Cod sursa(job #1196665)

Utilizator tudi98Cozma Tudor tudi98 Data 8 iunie 2014 17:36:35
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <cstring>

using namespace std;

#define MOD 666013

class matrix{
	public:
		long long a[4][4];
		matrix(){
			memset(a,0,sizeof a);
		}
		void init(int x,int y,int z){
			a[1][2]=a[2][3]=1;
			a[1][1]=x;
			a[2][1]=y;
			a[3][1]=z;
		}
		
		void operator*=(matrix m){
			matrix r;
			for(int i=1;i<=3;i++){
				for(int j=1;j<=3;j++){

					for(int k=1;k<=3;k++)
						r.a[i][j]+=a[i][k]*m.a[k][j];
					r.a[i][j]%=MOD;
				}
			}
			*this=r;
		} 
};


matrix lgput(matrix m,int p){

	matrix sol;
	sol.a[1][1]=sol.a[2][2]=sol.a[3][3]=1;
	while(p){
		if(p&1)
			sol*=m;
		m*=m;
		p>>=1;		
	}
	return sol;
}

int main(){

	ifstream f("iepuri.in");
	ofstream g("iepuri.out");

	int t,X,Y,Z,A,B,C,N;
	f >> t;
	while(t){
		f >> X >> Y >> Z >> A >> B >> C >> N;
		matrix z,c;
		z.init(A,B,C);
		z=lgput(z,N-2);
		c.a[1][1]=Z;
		c.a[1][2]=Y;
		c.a[1][3]=X;
		c*=z;
		g << c.a[1][1] <<"\n";
		t--;
	}
}