Cod sursa(job #1913191)

Utilizator FlowstaticBejan Irina Flowstatic Data 8 martie 2017 12:05:59
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <fstream>
#include <iostream>
#define MOD 666013
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

struct matrice
{
    long long int a;
    long long int b;
    long long int c;
    long long int d;
    long long int e;
    long long int f;
    long long int g;
    long long int h;
    long long int i;

    matrice(long long int a=0, long long int b=0, long long int c=0, long long int d=0,long long int e=0, long long int f=0, long long int g=0, long long int h=0,long long int i=0): a(a), b(b),c(c),d(d),e(e),f(f),g(g),h(h),i(i){}

    matrice operator*(const matrice& x) const
    {
        return matrice( ((x.a*a)%MOD + (x.b*d)%MOD + (x.c*g)%MOD)%MOD, ((x.a*b)%MOD + (x.b*e)%MOD + (x.c*h)%MOD)%MOD, ((x.a*c)%MOD + (x.b*f)%MOD + (x.c*i)%MOD)%MOD,
                        ((x.d*a)%MOD + (x.e*d)%MOD + (x.f*g)%MOD)%MOD, ((x.d*b)%MOD + (x.e*e)%MOD + (x.f*h)%MOD)%MOD, ((x.d*c)%MOD + (x.e*f)%MOD + (x.f*i)%MOD)%MOD,
                        ((x.g*a)%MOD + (x.h*d)%MOD + (x.i*g)%MOD)%MOD, ((x.g*b)%MOD + (x.h*e)%MOD + (x.i*h)%MOD)%MOD, ((x.g*c)%MOD + (x.h*f)%MOD + (x.i*i)%MOD)%MOD
                      );
    }

}mat,sol;

matrice exp(matrice mat,int e);

int main()
{
    int T;
    fin>>T;
    while(T--)
    {
        int X,Y,Z,A,B,C,N;
        fin>>X>>Y>>Z>>A>>B>>C>>N;

        mat.a = mat.c = mat.d = mat.e= 0;
        mat.b = mat.f = 1;
        mat.g = C;
        mat.h = B;
        mat.i = A;

        sol = exp(mat,N);

        fout<<(sol.a*X%MOD+sol.b*Y%MOD+sol.c*Z%MOD)%MOD;

        fout<<'\n';
    }
    return 0;
}

matrice exp(matrice mat,int e)
{
    if(e == 1)
        return mat;
    else if(e%2 == 0)
    {
        sol = exp(mat,e/2);
        return sol*sol;
    }
    else
    {
        sol = exp(mat,e/2);
        return sol*sol*mat;
    }
}