Cod sursa(job #3158194)

Utilizator TheEpicWipedCreaVlad Chirita Alexandru TheEpicWipedCrea Data 17 octombrie 2023 22:37:12
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in  ("iepuri.in");
ofstream out("iepuri.out");

#define MOD 666013

long long rez[4][4],m[4][4];
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 i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            for(int k=1;k<=3;k++){
                c[i][j]=(c[i][j]+(a[i][k]*b[k][j])%MOD)%MOD;
            }
        }
    }
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            a[i][j]=c[i][j];
        }
    }
}

void pwr(long long m[4][4],int exp){
    while(exp!=0){
        if(exp%2==0){
            inmultire(m,m);
            exp/=2;
        }
        else{
            inmultire(rez,m);
            exp--;
        }
    }
}

int main(){
    int t;
    in>>t;
    for(int q=1;q<=t;q++){
        int x,y,z,a,b,c,n;
        in>>x>>y>>z>>a>>b>>c>>n;
        rez[1][1]=rez[2][2]=rez[3][3]=1;
        m[1][2]=m[2][3]=1;
        m[3][1]=c;
        m[3][2]=b;
        m[3][3]=a;
        pwr(m,n-2);
        out<<((rez[3][1]*x)%MOD+(rez[3][2]*y)%MOD+(rez[3][3]*z)%MOD)%MOD<<'\n';
        for(int i=1;i<=3;i++){
            for(int j=1;j<=3;j++){
                rez[i][j]=m[i][j]=0;
            }
        }
    }
}