Cod sursa(job #1605626)

Utilizator iulian_f2kGuraliuc Iulian iulian_f2k Data 19 februarie 2016 11:51:59
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <fstream>
#define Mod 666013
using namespace std;
struct matrice{
long long a, b, c, d, e, f, g, h, i;
}I3, m;

int X, Y, Z, A, B, C, N, T;
 long long rasp;


matrice inmultireMatrice(matrice p, matrice q)
{
    matrice r;
    r.a = ((p.a*q.a)%Mod + (p.b*q.d)%Mod + (p.c*q.g)%Mod)%Mod;
    r.b = ((p.a*q.b)%Mod + (p.b*q.e)%Mod + (p.c*q.h)%Mod)%Mod;
    r.c = ((p.a*q.c)%Mod + (p.b*q.f)%Mod + (p.c*q.i)%Mod)%Mod;

    r.d = ((p.d*q.a)%Mod + (p.e*q.d)%Mod + (p.f*q.g)%Mod)%Mod;
    r.e = ((p.d*q.b)%Mod + (p.e*q.e)%Mod + (p.f*q.h)%Mod)%Mod;
    r.f = ((p.d*q.c)%Mod + (p.e*q.f)%Mod + (p.f*q.i)%Mod)%Mod;

    r.g = ((p.g*q.a)%Mod + (p.h*q.d)%Mod + (p.i*q.g)%Mod)%Mod;
    r.h = ((p.g*q.b)%Mod + (p.h*q.e)%Mod + (p.i*q.h)%Mod)%Mod;
    r.i = ((p.g*q.c)%Mod + (p.h*q.f)%Mod + (p.i*q.i)%Mod)%Mod;
    return r;
}

matrice putereMatrice(matrice p, long long pw)
{
    if(pw == 0)
        return I3;
    if(pw == 1)
        return p;
    matrice aux = putereMatrice(p, pw/2);

    aux = inmultireMatrice(aux, aux);
    if(pw%2 == 1)
        aux = inmultireMatrice(aux, p);
    return aux;
}


int main()
{
    freopen("iepuri.in", "rt", stdin);
    freopen("iepuri.out", "wt", stdout);
    scanf("%d", &T);
    I3.a = 1;
    I3.e = 1;
    I3.i = 1;
    for(int i=1; i<=T; ++i){
    scanf("%d%d%d%d%d%d%d", &X, &Y, &Z, &A, &B, &C, &N);
        m.a = m.b = m.e = m.g = 0;
        m.d = m.h = 1;
        m.c = C;
        m.f = B;
        m.i = A;
        m = putereMatrice(m, N-2);
        rasp = 0;
        rasp = (rasp + (m.c*X)%Mod)%Mod;
        rasp = (rasp + (m.f*Y)%Mod)%Mod;
        rasp = (rasp + (m.i*Z)%Mod)%Mod;
        cout<< rasp<<'\n';
    }
}