Cod sursa(job #634239)

Utilizator Ciurea93Ciurea Ionut Ciurea93 Data 15 noiembrie 2011 21:14:25
Problema Iepuri Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.36 kb
const md=666013;
type tip=array [1..3,1..3] of int64;
var a,s,aux:tip;
    k,i,x,y,b,c,n,h,g,z,j:longint;
    fi,fo:text;

procedure inmulteste(var a:tip; b:tip);
    var i,j,k:longint;
    begin
      for i:=1 to 3 do
        for j:=1 to 3 do
          aux[i,j]:=0;
      for i:=1 to 3 do
        for j:=1 to 3 do
          for k:=1 to 3 do
            aux[i,j]:=(aux[i,j]+((a[i,k]*b[k,j]) mod md)) mod md;
      a[1]:=aux[1];
      a[2]:=aux[2];
      a[3]:=aux[3];
    end;

procedure pow(t:longint);
    begin
      while t>0 do
        if t mod 2=0 then begin
                            inmulteste(a,a);
                            t:=t div 2;
                          end
                     else begin
                            inmulteste(s,a);
                            t:=t-1;
                          end;
    end;

begin
  assign(fi,'iepuri.in');
  assign(fo,'iepuri.out');
  reset(fi); rewrite(fo);
  readln(fi,k);
  for i:=1 to k do
    begin
      readln(fi,x,y,z,j,b,c,n);
      a[1,1]:=0;
      a[1,2]:=1;
      a[1,3]:=0;
      a[2,1]:=0;
      a[2,2]:=0;
      a[2,3]:=1;
      a[3,1]:=c;
      a[3,2]:=b;
      a[3,3]:=j;
      s[1]:=a[1];
      s[2]:=a[2];
      s[3]:=a[3];
      pow(n-1);
      writeln(fo,(((s[1,1]*x) mod md)+((s[1,2]*y) mod md)+((s[1,3]*z) mod md)) mod md);
    end;
  close(fo);
end.