Cod sursa(job #2180830)

Utilizator constantin.peticilaPeticila Constantin constantin.peticila Data 21 martie 2018 11:13:04
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 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 x;
    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]*z +matrix[2][1]*y+matrix[2][2]*x)%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;
    }
}