Cod sursa(job #2553254)

Utilizator dogaru_roxanaDogaru Roxana dogaru_roxana Data 21 februarie 2020 19:48:24
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.44 kb
#include <fstream>
#define modulo 666013
using namespace std;

ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");

int t, x, y, z, a, b, c, aj[5][5], r[2][5], n, rez, aux[5][5];

void RPTLG (int aj[5][5], int exp)
{
    int i, k, j, f;

    for (i=1; i<=3; i++)
    {
        for (j=1; j<=3; j++)
        {
            if (i==j)
                r[i][j]=1;
            else
                r[i][j]=0;
        }
    }

    for (i=0; (1<<i)<=exp; i++)
    {
        if (((1<<i)&exp) > 0)
        {
            for (k=1; k<=3; k++)
            {
                for (j=1; j<=3; j++)
                {
                    aux[k][j]=0;

                    for (f=1; f<=3; f++)
                    {
                        aux[k][j]=(aux[k][j]+(aj[k][f]*r[f][j])%modulo)%modulo;
                    }
                }
            }

            for (k=1; k<=3; k++)
            {
                for (j=1; j<=3; j++)
                {
                    r[k][j]=aux[k][j];
                }
            }
        }

        for (k=1; k<=3; k++)
        {
            for (j=1; j<=3; j++)
            {
                aux[k][j]=0;

                for (f=1; f<=3; f++)
                {
                    aux[k][j]=(aux[k][j]+(aj[k][f]*aj[f][j])%modulo)%modulo;
                }
            }
        }


        for (k=1; k<=3; k++)
        {
            for (j=1; j<=3; j++)
            {
                aj[k][j]=aux[k][j];
            }
        }
    }
}

int main()
{
    int p;

    fin>>t;

    for (p=1; p<=t; p++)
    {
        fin>>x>>y>>z>>a>>b>>c>>n;

        if (n>=3)
        {
            aj[1][1]=0;
            aj[2][1]=1;
            aj[3][1]=0;

            aj[1][2]=0;
            aj[2][2]=0;
            aj[3][2]=1;

            aj[1][3]=c;
            aj[2][3]=b;
            aj[3][3]=a;


            ///ridicam matricea aj la puterea n-2

             RPTLG(aj, n-2);

             rez=((x*r[1][3])%modulo+(y*r[2][3])%modulo+(z*r[3][3])%modulo)%modulo;

             fout<<rez<<"\n";
        }
        else
        {
            if (n==0)
                fout<<x<<"\n";
            else
            {
                if (n==1)
                    fout<<y<<"\n";
                else
                {
                    fout<<z<<"\n";
                }
            }
        }
    }


    fin.close();
    fout.close();
    return 0;
}