Cod sursa(job #2180408)

Utilizator seby97cojocariu sebastian seby97 Data 20 martie 2018 20:50:20
Problema Iepuri Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
#define mod 666013
using namespace std;

void multiplication(int a[3][3],int b[3][3]){
	int matrix[3][3];
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			long long aux = 0;
					for(int k=0;k<3;k++)
						aux +=(1LL*a[i][k]*b[k][j])%mod;
				matrix[i][j] = aux;			
		}
	}

	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			a[i][j] = matrix[i][j];

}

void fast_power(int matrix[3][3],int copie[3][3],int exponent){
	if(exponent == 1) return;

	fast_power(matrix,copie,exponent/2);
	multiplication(matrix,matrix);
	
	if(exponent%2==1)
		multiplication(matrix,copie);

}
int iepuri(int x,int y,int z,int a,int b,int c,int n){
	if(n==1) return y;
	if(n==2) return z;
	int matrix[3][3]={{0,1,0},{0,0,1},{c,b,a}};
	int copie[3][3]={{0,1,0},{0,0,1},{c,b,a}};

	fast_power(matrix,copie,n-2);
	return
		1LL*(matrix[2][0]*x+matrix[2][1]*y+matrix[2][2]*z)%mod;	 
}

int main(){
	ifstream in("iepuri.in");
	ofstream out("iepuri.out");
	int nr_linii;
	in>>nr_linii;
	int x,y,z,a,b,c,n;
	for(int i=0;i<nr_linii;i++){
		in>>x>>y>>z>>a>>b>>c>>n;
		out<<iepuri(x,y,z,a,b,c,n)<<endl;
	}
}