Cod sursa(job #3158235)

Utilizator katerinakaterina gavrizi katerina Data 18 octombrie 2023 08:34:18
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream>
using namespace std;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
long long x,y,z,a,b,c,n,inm[4][4],v[4],rez[4][4],i,j,k;
int MOD=666013;
void inmat()
{
    long long aux[4][4];
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++){
            aux[i][j]=0;
            for(k=1;k<=3;k++)
                aux[i][j]+=(1LL*(inm[i][k]*inm[k][j])%MOD);
        }
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            inm[i][j]=aux[i][j]%MOD;
}
void inmat1()
{
    long long aux2[4][4];
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++){
            aux2[i][j]=0;
            for(k=1;k<=3;k++)
                aux2[i][j]+=(1LL*(inm[i][k]*rez[k][j])%MOD);
        }
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            rez[i][j]=aux2[i][j]%MOD;
}
void sfarsit()
{
    long long aux1[4];
    for(i=1;i<=3;i++){
        aux1[i]=0;
        for(k=1;k<=3;k++)
        aux1[i]+=(1LL*(rez[i][k]*v[k])%MOD);
    }
    for(i=1;i<=3;i++)
        v[i]=aux1[i]%MOD;
}
void plog( long long n)
{
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            rez[i][j]=0;
    rez[1][1]=1;
    rez[2][2]=1;
    rez[3][3]=1;
    long long exp=n;
    while(exp!=0){
        if(exp%2==0){
            inmat();
            exp/=2;
        }
        else{
            inmat1();
            exp--;
        }
    }
}
void solve()
{
    cin>>x>>y>>z>>a>>b>>c>>n;
    v[1]=x,v[2]=y,v[3]=z;
    for(i=1;i<=3;i++)
        for( j=1;j<=3;j++)
            inm[i][j]=0;
    inm[1][2]=1,inm[2][3]=1,inm[3][1]=c,inm[3][2]=b,inm[3][3]=a;
    plog(n-2);
    sfarsit();
    cout<<v[3]<<"\n";
}
int main()
{
    long long q;
    cin>>q;
    while(q--)
        solve();
    return 0;
}