Cod sursa(job #2392700)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 30 martie 2019 12:08:13
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <bits/stdc++.h>
#define mod 666013
using namespace std;



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

long long matr_neutra[4][4];

void inmultire(long long A[4][4],long long B[4][4])
{
    long long i,j,k,C[4][4];

    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        C[i][j]=0;

    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        for(k=1;k<=3;k++)
        C[i][j]+=(A[i][k]*B[k][j])%mod;

    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        A[i][j]=C[i][j]%mod;


}


void putere(long long sol[4][4],long long k)
{
    while(k)
    {
        if(k%2==1){inmultire(sol,matr_neutra);k--;}
        else {inmultire(matr_neutra,matr_neutra);k=k/2;}
    }
}







long long m,y,A,x,n,b,c,z,sol[4][4],a[4][4];
int main()
{
    f>>m;
    for(int pas=1;pas<=m;pas++)
    {

        f>>x>>y>>z>>A>>b>>c>>n;



        a[1][1]=x;
        a[1][2]=y;
        a[1][3]=z;
        a[2][1]=a[2][2]=a[2][3]=0;
        a[3][1]=a[3][2]=a[3][3]=0;


        matr_neutra[1][1]=0;
        matr_neutra[1][2]=0;
        matr_neutra[1][3]=A;

        matr_neutra[2][1]=1;
        matr_neutra[2][2]=0;
        matr_neutra[2][3]=b;

        matr_neutra[3][1]=0;
        matr_neutra[3][2]=1;
        matr_neutra[3][3]=c;


        for(int i=1;i<=3;i++)
            for(int j=1;j<=3;j++)
            sol[i][j]=0;
        sol[1][1]=1;
        sol[2][2]=1;
        sol[3][3]=1;


        putere(sol,n);
        inmultire(a,sol);

        g<<a[1][1]%mod<<'\n';
    }


    return 0;
}