Cod sursa(job #40097)

Utilizator andrei_infoMirestean Andrei andrei_info Data 27 martie 2007 11:18:24
Problema Iepuri Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.22 kb
//infoarena iepuri

type mat = array[1..3,1..3] of longint;

var m:mat;
    x,y,z,a,b,c,n:longint;

procedure inmultire(var rez:mat; a,b:mat);
var i,j,k:integer;
begin
for i:=1 to 3 do
        for j:=1 to 3 do
              begin
              rez[i,j]:=0;
              for k:=1 to 3 do
                rez[i,j]:=rez[i,j]+a[i,k]*b[k,j];
              end;
end;

function mlan(n:longint):mat;
var aux,n1:mat;
begin
if n = 1 then begin mlan:=m; exit; end;
if n mod 2 = 0 then
        begin
        n1:=mlan(n div 2);
        inmultire(aux,n1,n1);
        mlan:=aux;
        end
else
        begin
        n1:=mlan(n-1);
        inmultire(aux,n1,m);
        mlan:=aux;
        end;
end;

procedure calc;
var mn:mat;
    rez:longint;
begin
mn:=mlan(n);
rez:=mn[1,1]*x+mn[1,2]*y+mn[1,3]*z;
writeln(rez);
end;

procedure citire;
var i,t:integer;
begin
assign(input,'iepuri.in'); reset(input);
assign(output,'iepuri.out'); rewrite(output);
readln(t);
for i:=1 to t do
        begin
        readln(x,y,z,a,b,c,n);
        fillchar(m,sizeof(m),0);
        m[1,2]:=1; m[2,3]:=1; m[3,1]:=c; m[3,2]:=b; m[3,3]:=a;
        calc;
        end;
close(input); close(output);
end;

begin
citire;
end.