Cod sursa(job #2466255)

Utilizator ianiIani Biro iani Data 1 octombrie 2019 19:47:44
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <iostream>
#include <fstream>

#define MOD 666013
 
using namespace std;

int x,y,z;

void afisare(int a[4][4])
{
    for (int i=1;i<=3;i++)
    {
        for (int j=1;j<=3;j++)
            cout<<a[i][j]<<' ';
        cout<<'\n';
    }
    cout<<'\n';
}

void multire(int a[4][4],int b[4][4])
{
    int c[4][4];
    for (int i=1;i<=3;i++)
        for (int j=1;j<=3;j++)
            c[i][j]=0;
    for (int i=1; i<=3; i++)
        for (int j=1; j<=3; j++)
            for (int k=1; k<=3; k++)
                c[i][j]=(c[i][j]+a[i][k]*b[k][j])%MOD;
    for (int i=1;i<=3;i++)
        for (int j=1;j<=3;j++)
            a[i][j]=c[i][j];
}

void putere(int a[4][4],int put)
{
    /*for (int i=1;i<put;i++)
        multire(a, a);
    return;*/

    int b[4][4];
    
    b[1][1]=x;
    b[1][2]=y;
    b[1][3]=z;
    b[2][1]=1;
    b[3][2]=1;
    b[2][2]=b[2][3]=b[3][1]=b[3][3]=0;
    
    while(put)
    {
        if(put%2)
        {
            multire(b, a);
            put--;
        }
        else
        {
            multire(a,a);
            put/=2;
        }
    }
    for(int i = 1; i <= 3; ++i)
        for(int j = 1; j <= 3; ++j)
            a[i][j] = b[i][j];
}

int main()
{
    ifstream fin ("iepuri.in");
    ofstream fout ("iepuri.out");
    int m;
    fin>>m;
    for (int q=0;q<m;q++)
    {
        int a,b,c,n,m1[4][4],m2[4][4];
        fin>>a>>b>>c>>x>>y>>z>>n;
        m1[1][1]=x;
        m1[1][2]=y;
        m1[1][3]=z;
        m1[2][1]=1;
        m1[3][2]=1;
        m1[2][2]=m1[2][3]=m1[3][1]=m1[3][3]=0;
        
        /*m2[1][1]=c;
        m2[2][1]=b;
        m2[3][1]=a;
        m2[1][2]=m2[1][3]=m2[2][2]=m2[2][3]=m2[3][2]=m2[3][3]=0;*/
        
        putere(m1, n-1);
        
        int rasp=0;
        //afisare(m1);
        rasp=(rasp+(m1[3][1]*c)%MOD)%MOD;
        rasp=(rasp+(m1[3][2]*b)%MOD)%MOD;
        rasp=(rasp+(m1[3][3]*a)%MOD)%MOD;
        fout<<rasp<<"\n";
    }
    return 0;
}