Cod sursa(job #2897405)

Utilizator mitumitucristinaMitu Cristina mitumitucristina Data 3 mai 2022 17:39:35
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<fstream>
#define MOD 666013
using namespace std;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
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 ridic(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 p,x,y,z,a,b,c,n;
cin>>p;
for(int k=1;k<=p;k++){
    cin>>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;
    ridic(m,n-2);
    cout<<((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;
}
return 0;
}