Cod sursa(job #1980606)

Utilizator b10nd3Oana Mancu b10nd3 Data 13 mai 2017 15:07:34
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<stdio.h>
#include<stdlib.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]*b[i][c]*1LL;
	return rez%mod;     
}

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


int main(){
	ifstream in; ofstream out;
	in.open("iepuri.in"); out.open("iepuri.out");
	out.clear();
	
	int t,x,y,z,a,b,c;
	long n;
	long long rez[3][3];
	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}};
		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(rez,sol,ct);
				copyMatrix(sol,rez);
			}
			matrixMultiplication(rez,ct,ct); 
			copyMatrix(ct,rez);
		}
		
		if(n==0) out<<x;
		else if (n==1) out<<y;
		else if (n==2) out<<z;
		else out<<z*sol[0][0]+y*sol[1][0]+x*sol[2][0];
		out<<endl;
	} 
	
	
	in.close(); out.close();
	return 0;
}