Cod sursa(job #2676001)

Utilizator StefyanStefan Stanciu Stefyan Data 23 noiembrie 2020 09:17:26
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.11 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("iepuri.in");
ofstream g("iepuri.out");

long long n;
int t, a, b, c, x, y, z, A[3][3], rez[3][3], sol, rez_aux[3][3], modu=666013;

void initrez()
{
    rez[0][0]=1;
    rez[0][1]=0;
    rez[0][2]=0;
    rez[1][0]=0;
    rez[1][1]=1;
    rez[1][2]=0;
    rez[2][0]=0;
    rez[2][1]=0;
    rez[2][2]=1;
}

void initializare(int a, int b, int c)
{
        A[0][0]=a;
        A[0][1]=b;
        A[0][2]=c;
        A[1][0]=1;
        A[2][1]=1;
        A[1][1]=0;
        A[1][2]=0;
        A[2][0]=0;
        A[2][2]=0;
}

void copiere(int a[3][3], int b[3][3])
{
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            a[i][j]=b[i][j];
        }
    }
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            rez_aux[i][j]=0;
        }
    }
}

void matricelapatrat()
{
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            rez_aux[i][j]=0;
        }
    }
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            for(int k=0;k<3;k++)
            {
                rez_aux[i][j]=rez_aux[i][j]+(A[i][k]*A[k][j])%modu;
            }
        }
    }
    copiere(A, rez_aux);
}

void puterematrice()
{
    while(n)
    {
        if(n%2==1)
        {
            for(int i=0;i<3;i++)
            {
                for(int j=0;j<3;j++)
                {
                    for(int k=0;k<3;k++)
                    {
                        rez_aux[i][j]=rez_aux[i][j]+(rez[i][k]*A[k][j])%modu;
                    }
                }
            }
            copiere(rez, rez_aux);
        }
        matricelapatrat();
        n/=2;
    }
}

void rezultat()
{
    sol=(rez[0][0]*z)%modu+(rez[0][1]*y)%modu+(rez[0][2]*x)%modu;
}

int main()
{
    f>>t;
    for(int i=1;i<=t;i++)
    {
        f>>x>>y>>z>>a>>b>>c>>n;
        n-=2;
        initializare(a, b, c);
        initrez();
        puterematrice();
        rezultat();
        g<<sol<<'\n';
    }
    return 0;
}