Cod sursa(job #2391778)

Utilizator DovlecelBostan Andrei Dovlecel Data 29 martie 2019 11:05:36
Problema Iepuri Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <fstream>

using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
const int MOD=666013;
int t,ac,b,c,x,y,z,n;
struct mat
{
    int m[3][3];
}a,aux;
mat inmultire(mat x,mat y)
{
    mat man;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            man.m[i][j]=0;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            for(int k=0;k<3;k++)
                man.m[i][j]=(man.m[i][j]+1LL*x.m[i][k]*y.m[k][j]%MOD)%MOD;
    return  man;
}
void init();
void afisare(mat x)
{
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
            out<<x.m[i][j]<<' ';
        out<<'\n';
    }
}

int main()
{
    int k;
    in>>t;
    while(t)
    {
        in>>x>>y>>z>>ac>>b>>c>>n;
        init();
        k=0;
        while((1<<k)<=n)
        {
            if((1<<k)&n)
                aux=inmultire(aux,a);
            k++;
            a=inmultire(a,a);
        }
        out<<((x*aux.m[0][0])%MOD+(y*aux.m[1][0])%MOD+(z*aux.m[2][0])%MOD)%MOD<<'\n';
        t--;
    }
    return 0;
}

void init()
{
    a.m[0][0]=0;
    a.m[0][1]=0;
    a.m[0][2]=c;
    a.m[1][0]=1;
    a.m[1][1]=0;
    a.m[1][2]=b;
    a.m[2][0]=0;
    a.m[2][1]=1;
    a.m[2][2]=ac;
    aux.m[0][0]=1;
    aux.m[0][1]=0;
    aux.m[0][2]=0;
    aux.m[1][0]=0;
    aux.m[1][1]=1;
    aux.m[1][2]=0;
    aux.m[2][0]=0;
    aux.m[2][1]=0;
    aux.m[2][2]=1;
}