Cod sursa(job #3158898)

Utilizator ana_valeriaAna Valeria Duguleanu ana_valeria Data 19 octombrie 2023 23:40:11
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda HLO 2023 - Cls 11-12 - Tema 0 Marime 1.7 kb
#include <fstream>

using namespace std;
ifstream cin ("iepuri.in");
ofstream cout ("iepuri.out");
int n;
long long b[5][5],rez[5][5],aux[5][5],ini[5][5],mat[5][5];
void ridicare(long long b[5][5],long long exp)
{
    int i,j,k;
    for (i=1; i<=3; i++)
        for (j=1; j<=3; j++)
            if (i==j)
                rez[i][j]=1;
            else
                rez[i][j]=0;
    while (exp!=0)
        if (exp%2==0)
        {
            exp=exp/2;
            for (i=1; i<=3; i++)
                for (j=1; j<=3; j++)
                    for (k=1; k<=3; k++)
                        aux[i][j]=(aux[i][j]+(b[i][k]*b[k][j])%666013)%666013;
            for (i=1; i<=3; i++)
                for (j=1; j<=3; j++)
                {
                    b[i][j]=aux[i][j];
                    aux[i][j]=0;
                }
        }
        else
        {
            exp--;
            for (i=1; i<=3; i++)
                for (j=1; j<=3; j++)
                    for (k=1; k<=3; k++)
                        aux[i][j]=(aux[i][j]+(rez[i][k]*b[k][j])%666013)%666013;
            for (i=1; i<=3; i++)
                for (j=1; j<=3; j++)
                {
                    rez[i][j]=aux[i][j];
                    aux[i][j]=0;
                }
        }
}
int main()
{
    int t,i,x,y,z,a,b,c;
    cin>>t;
    for (i=1; i<=t; i++)
    {
        cin>>x>>y>>z>>a>>b>>c>>n;
        ini[1][1]=0; ini[1][2]=1; ini[1][3]=0;
        ini[2][1]=0; ini[2][2]=0; ini[2][3]=1;
        ini[3][1]=c; ini[3][2]=b; ini[3][3]=a;
        mat[1][1]=x;
        mat[2][1]=y;
        mat[3][1]=z;
        ridicare(ini,n-2);
        cout<<((rez[3][1]*mat[1][1])%666013+(rez[3][2]*mat[2][1])%666013+(rez[3][3]*mat[3][1])%666013)%666013<<"\n";
    }
    return 0;
}