Cod sursa(job #3157110)

Utilizator RosuDragos123Rosu Dragos RosuDragos123 Data 14 octombrie 2023 12:50:03
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.39 kb
#include <fstream>
using namespace std;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
const unsigned long long MOD=666013;
unsigned long long x,y,z,a,b,c,n;
unsigned long long i[4][4] , v[4] , rez[4][4];
void inmultire()
{
    unsigned long long aux[4][4];
    for(unsigned long long i1=1;i1<=3;i1++)
    {
        for(unsigned long long j=1;j<=3;j++)
        {
            aux[i1][j]=0;
            for(unsigned long long k=1;k<=3;k++)
            {
                aux[i1][j]+=(1LL*(i[i1][k]*i[k][j])%MOD);
            }
        }
    }
    for(unsigned long long i1=1;i1<=3;i1++)
        for(unsigned long long j=1;j<=3;j++)
            i[i1][j]=aux[i1][j]%MOD;

}
void inmultirerez()
{
    unsigned long long aux2[4][4];
    for(unsigned long long i1=1;i1<=3;i1++)
    {
        for(unsigned long long j=1;j<=3;j++)
        {
            aux2[i1][j]=0;
            for(unsigned long long k=1;k<=3;k++)
            {
                aux2[i1][j]+=(1LL*(i[i1][k]*rez[k][j])%MOD);
            }
        }
    }
    for(unsigned long long i1=1;i1<=3;i1++)
    {
        for(unsigned long long j=1;j<=3;j++)
        {
            rez[i1][j]=aux2[i1][j]%MOD;
        }
    }
}
void inmultirefin()
{
    unsigned long long aux1[4];
    for(unsigned long long i1=1;i1<=3;i1++)
    {
        aux1[i1]=0;
        for(unsigned long long k=1;k<=3;k++)
        {
            aux1[i1]+=(1LL*(rez[i1][k]*v[k])%MOD);
        }
    }
    for(unsigned long long i1=1;i1<=3;i1++)
        v[i1]=aux1[i1]%MOD;
}
void putere(unsigned long long n)
{
    for(unsigned long long i1=1;i1<=3;i1++)
        for(unsigned long long j=1;j<=3;j++)
            rez[i1][j]=0;
    rez[1][1]=1;
    rez[2][2]=1;
    rez[3][3]=1;

    unsigned long long exp=n;
    while(exp!=0)
    {
        if(exp%2==0)
        {
            inmultire();
            exp/=2;
        }
        else
        {
            inmultirerez();
            exp--;
        }
    }
}
void solve()
{
    cin>>x>>y>>z>>a>>b>>c>>n;
    v[1]=x , v[2]=y , v[3]=z;
    for(unsigned long long i1=1;i1<=3;i1++)
        for(unsigned long long j=1;j<=3;j++)
            i[i1][j]=0;
    i[1][2]=1 , i[2][3]=1 , i[3][1]=c , i[3][2]=b , i[3][3]=a;
    putere(n-2);
    inmultirefin();
    cout<<v[3]<<'\n';
}
int main()
{
    unsigned long long t;
    cin>>t;
    while(t--)
    solve();
    return 0;
}