Cod sursa(job #1667544)

Utilizator cordun_cristinaCristina Maria Cordun cordun_cristina Data 28 martie 2016 23:52:04
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <cstring>

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

const int mod = 666013;
long long t, x, y, z, a, b, c, n;
long long sol[5][5], m[5][5], aux[5][5];

void Inmult(long long a1[5][5], long long a2[5][5])
{
    for(int i = 0; i <= 2; i++)
    {
        for(int j = 0; j <= 2; j++)
        {
            for(int k = 0; k <= 2; k++)
            {
                aux[i][j] = (aux[i][j]+a1[i][k]*a2[k][j]) % mod;
            }
        }
    }
    for(int i = 0; i <= 2; i++)
        for(int j = 0; j <= 2; j++)
            a1[i][j] = aux[i][j];
}

void putere(long long p)
{
    while(p)
    {
        if(p%2) Inmult(sol,m);
        memset(aux,0,sizeof(aux));
        Inmult(m,m);
        memset(aux,0,sizeof(aux));
        p = p/2;
    }
}

int main()
{
    f>>t;
    while(t--)
    {
        memset(sol,0,sizeof(sol));
        f>>x>>y>>z>>a>>b>>c>>n;
        m[0][0] = 0; m[0][1] = 0; m[0][2] = c;
        m[1][0] = 1; m[1][1] = 0; m[1][2] = b;
        m[2][0] = 0; m[2][1] = 1; m[2][2] = a;
        sol[1][1] = sol[0][0] = sol[2][2] = 1;
        putere(n-2);
        g<<(x*sol[0][2] + y*sol[1][2] + z*sol[2][2]*1LL)%mod<<'\n';
    }
    return 0;
}