Cod sursa(job #1795749)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 2 noiembrie 2016 20:22:48
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>
#define MOD 666013

using namespace std;

ifstream in("iepuri.in");
ofstream out("iepuri.out");
int n,x,y,z,a,b,c,t;

class matrix{
public:
    long long int a[4][4];
    int l,c;
};
matrix rec,m;

matrix inmultire(matrix a,matrix b)
{
    matrix r;
    r.l = a.l;
    r.c = b.c;
    for(int i=1;i<=a.l;i++)
        for(int j=1;j<=b.c;j++)
        r.a[i][j] = 0;
    for(int i=1;i<=a.l;i++)
        for(int j=1;j<=b.c;j++)
            for(int k=1;k<=a.c;k++)
            r.a[i][j]+= (1LL*a.a[i][k]*b.a[k][j])%MOD;
    return r;
}

matrix ridicare(matrix a,int p)
{
    if(p==1)
        return a;
    else
    {
        if(p%2==0)
        {
            matrix aux = ridicare(a,p/2);
            return inmultire(aux,aux);
        }
        else
            return inmultire(a,ridicare(a,p-1));
    }
}

void ini_m()
{
    m.l = 3;
    m.c = 3;
    m.a[1][1] = 0;
    m.a[1][2] = 0;
    m.a[1][3] = c;
    m.a[2][1] = 1;
    m.a[2][2] = 0;
    m.a[2][3] = b;
    m.a[3][1] = 0;
    m.a[3][2] = 1;
    m.a[3][3] = a;
}

void ini_rec()
{
    rec.l = 1;
    rec.c = 3;
    rec.a[1][1] = x;
    rec.a[1][2] = y;
    rec.a[1][3] = z;
}

int main()
{

    in>>t;
    for(int i=1;i<=t;i++)
    {
        in>>x>>y>>z>>a>>b>>c>>n;
        ini_m();
        m = ridicare(m,n-2);
        ini_rec();
        rec = inmultire(rec,m);
        out<<rec.a[1][3]%MOD<<"\n";
    }
    in.close();
    out.close();
    return 0;
}