Cod sursa(job #2155141)

Utilizator filip.mihalutMihalut Filip filip.mihalut Data 7 martie 2018 17:17:10
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <iostream>
#include <fstream>
#define mod 666013

using namespace std;

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

long long i,j,a,b,c,x,y,z,mat[4][4],cop[4][4],matrice[4][4],s,q,t,n;

void ridicLaPatrat()
{

    for(i = 1;i <= 3;i++)
        for(j = 1;j <= 3;j++)
        cop[i][j] = mat[i][j];


    for(i = 1;i <= 3;i++)
        for(j = 1;j <= 3;j++)
    {
        s = 0;
        for(q = 1;q <= 3;q++)
            s = (s + (cop[i][q]*cop[q][j]) % mod) % mod;
        mat[i][j] = s;
    }
}

void inmultescMatrici()
{
    for(i = 1;i <= 3;i++)
        for(j = 1;j <= 3;j++)
        {
            s = 0;
            for(q = 1;q <= 3;q++)
                s = (s + (mat[i][q] * matrice[q][j])%mod)%mod;
            cop[i][j] = s;
        }

    for(i = 1;i <= 3;i++)
        for(j = 1;j <= 3;j++)
        matrice[i][j] = cop[i][j];
}

void init()
{
    mat[1][1] = a ; mat[1][2] = b ; mat[1][3] = c;
    mat[2][1] = 1 ; mat[2][2] = 0 ; mat[2][3] = 0;
    mat[3][1] = 0 ; mat[3][2] = 1 ; mat[3][3] = 0;

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

void lgput(int p)
{
    init();



    while(p)
    {
        if(p % 2 == 0)
            ridicLaPatrat() , p /= 2;
        else inmultescMatrici(),p--;
    }

}

int main()
{
    f >> t;
    while(t)
    {
        f >> x >> y >> z >> a >> b >> c >> n;
        lgput(n - 2);
        g << ( (matrice[1][1] * z) %mod + ( matrice[1][2] * y) % mod + (matrice[1][3] * x)%mod) % mod << '\n';
        t--;
    }
    return 0;
}