Cod sursa(job #1980865)

Utilizator b10nd3Oana Mancu b10nd3 Data 14 mai 2017 11:43:41
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fstream>
#include<iostream>


using namespace std;

const int mod=666013;


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++)
	     for(int i=0;i<3;i++)
	      rez[r][c]=(rez[r][c]%mod+((a[r][i]%mod)*(b[i][c]%mod))%mod)%mod;
	memcpy(a,rez,9*sizeof(long long));      
}


int main(){
	
	FILE *in, *out;
	in = fopen("iepuri.in", "r");
    out = fopen("iepuri.out", "w");
	
	int t,x,y,z,a,b,c;
	long n;
	fscanf(in, "%d", &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]=a; ct[1][0]=b; ct[2][0]=c;
		
		n=n-2;
		while(n){
			if(n%2){
				n--;
				matrixMultiplication(sol,ct);
			}
			n=n/2;
			matrixMultiplication(ct,ct); 
		}
		
	/*	
		for(int j=0; (1LL<<j)<=(n-2);j++){
			if(((1L<<j)&(n-2))>0) {
				matrixMultiplication(sol,ct);
			}
			matrixMultiplication(ct,ct); 
		}
	*/	
	   fprintf(out, "%lld\n",((z*(sol[0][0])%mod+(y*sol[1][0])%mod)%mod+(x*sol[2][0])%mod)%mod);  
	} 
	
	
	return 0;
}