Cod sursa(job #1195417)

Utilizator misinozzz zzz misino Data 7 iunie 2014 10:12:09
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<fstream>

#define MOD 666013

using namespace std;

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

int a1,b,c,x,y,z,n,t,i,j,a[3][3],m[3][3];

void inmulteste(int a[][3],int m[][3]){
    int i,j,k;
    int aux[3][3] = {{0,0,0} , {0,0,0} , {0,0,0}};

    for(i = 0 ; i <= 2 ; ++ i)
    for(j = 0 ; j <= 2 ; ++ j)
    for(k = 0 ; k <= 2 ; ++ k)
    aux[i][j] = (aux[i][j] + 1ll * a[i][k] * m[k][j]) % MOD;

    for(i = 0 ; i <= 2 ; ++ i)
    for(j = 0 ; j <= 2 ; ++ j)
    a[i][j] = aux[i][j];
}

inline void putere(int a[3][3],int p)
{
    while(p > 0)
    {
        if(p & 1)
        {
            -- p;
            inmulteste(a,m);
        }
        else
        {
            p >>= 1;
            inmulteste(m,m);
        }
    }
}

int main()
{
    f >> t;

    while(t)
    {
        f >> x >> y >> z >> a1 >> b >> c >> n;
        -- t;
        m[0][0] = a1;
        m[0][1] = b;
        m[0][2] = c;
        m[1][0] = 1;
        m[1][1] = 0;
        m[1][2] = 0;
        m[2][0] = 0;
        m[2][1] = 1;
        m[2][2] = 0;

        for(i = 0 ; i <= 2 ; ++ i)
        for(j = 0 ; j <= 2 ; ++ j)
        if(i == j)
        a[i][j] = 1;
        else
        a[i][j] = 0;

        putere(a , n - 2);

        g << ((1ll * a[0][0] * z ) % MOD + (1ll * a[0][1] * y ) % MOD + (1ll * a[0][2] * x) % MOD) % MOD << '\n';
    }
    return 0;
}