Cod sursa(job #2492541)

Utilizator Bogdan_BuzatuBuzatu Bogdan Mihai Bogdan_Buzatu Data 14 noiembrie 2019 21:33:40
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
void initializare(long long a[4][4],int aa,int bb,int cc){

        a[1][1]=aa;
        a[1][2]=bb;
        a[1][3]=cc;
        a[2][1]=1;
        a[3][2]=1;
        a[2][2]=0;
        a[2][3]=0;
        a[3][1]=0;
        a[3][3]=0;


}
void inmultire(long long a[4][4], long long b[4][4], long long c[4][4]){
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            c[i][j]=0;
            for(int k=1;k<=3;k++){
                c[i][j]+=a[i][k]*b[k][j];
                c[i][j]%=666013;
            }
        }
    }


}
void copiere(long long a[4][4], long long b[4][4]){
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            a[i][j]=b[i][j];
        }
    }

}
long long a[4][4],p[4][4],aux[4][4],n,x,y,z,aa,bb,cc,t;
int main(){
    fin>>t;
    for(int k=1;k<=t;k++){
        fin>>x>>y>>z>>aa>>bb>>cc>>n;

        n--;
        initializare(a,aa,bb,cc);
        initializare(p,aa,bb,cc);
        while(n!=0){
            if(n%2==1){
                inmultire(a,p,aux);
                copiere(p,aux);
            }
            inmultire(a,a,aux);
            copiere(a,aux);
            n=n/2;
        }
        fout<<((p[3][1]*z)%666013 + (p[3][2]*y)%666013 + (p[3][3]*x)%666013 )%666013<<"\n";

    }




}