Cod sursa(job #1980631)

Utilizator b10nd3Oana Mancu b10nd3 Data 13 mai 2017 17:13:59
Problema Iepuri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fstream>
#include<iostream>


using namespace std;

const int mod=666013;


void copyMatrix(long long a[][3], long long b[][3]){
	for(int r=0;r<3; r++)
	  for(int c=0;c<3; c++)
	     a[r][c]=b[r][c];
}


long long matrixMultiplicationAux(long long a[][3], long long b[][3], int r, int c){
	long long rez=0;
	for(int i=0;i<3;i++)
	     rez+=(a[r][i]%mod*b[i][c]%mod)%mod;
	return rez%mod;     
}

void matrixMultiplication(long long a[][3], long long b[][3]){
	long long rez[3][3];
	memset(rez,0,9*sizeof(long long));
	for(int r=0;r<3; r++)
	  for(int c=0;c<3; c++)
	      rez[r][c]=matrixMultiplicationAux(a,b, r,c);
	memcpy(a,rez,9*sizeof(long long));      
}


int main(){
	ifstream in; ofstream out;
	in.open("iepuri.in"); out.open("iepuri.out");
	out.clear();
	
	//FILE *in, *out;
	//in = fopen("iepuri.in", "r");
    //out = fopen("iepuri.out", "w");
	
	int t,x,y,z,a,b,c;
	long n;
	//long long rez[3][3];
	//fscanf(in, "%d", &t);   
	in>>t; 
	for(int i=1;i<=t;i++){
	    long long sol[3][3]={{1, 0 ,0}, {0, 1, 0}, {0, 0, 1}}; //initialize solution with identity matrix
	    long long ct[3][3]={{0, 1, 0}, {0, 0, 1}, {0, 0, 0}};
		//fscanf(in, "%d %d %d %d %d %d %ld", &x, &y, &z, &a, &b, &c, &n); //ct[0][0], ct[1][0], ct[2][0], &n);
		//ct[0][0]=a; ct[1][0]=b; ct[2][0]=c;
		in>>x>>y>>z>>ct[0][0]>>ct[1][0]>>ct[2][0]>>n;
		
		for(int j=0; (1<<j)<=(n-2);j++){
			if(((1<<j)&(n-2))>0) {
				matrixMultiplication(sol,ct);
				//copyMatrix(sol,rez);
			}
			matrixMultiplication(ct,ct); 
			//copyMatrix(ct,rez);
		}
		
		if(n==0) /*fprintf(out, "%lld\n",x); */ out<<x;
		else if (n==1) /*fprintf(out, "%lld\n",y); */ out<<y;
		else if (n==2) /*fprintf(out, "%lld\n",z); */ out<<z;
		else /*fprintf(out, "%lld\n",((z*(sol[0][0])%mod+(y*sol[1][0])%mod)%mod+(x*sol[2][0])%mod)%mod);   */ out<<((z*(sol[0][0])%mod+(y*sol[1][0])%mod)%mod+(x*sol[2][0])%mod)%mod;
		out<<endl;
	} 
	
	
	in.close(); out.close();
	return 0;
}