MBEEWALK - Bee Walk

Tác giả: ll931110

Ngôn ngữ: Pascal

{$MODE DELPHI}
program MBEEWALK;
const
  dx: array[1..6] of integer = (-1,-1,0,0,1,1);
  dy: array[1..6] of integer = (0,1,-1,1,-1,0);
  maxn = 14;
type
  rec = record
    x,y: integer;
  end;
var
  f: array[-maxn..maxn,-maxn..maxn,0..maxn] of int64;
  q: array[1..40000] of rec;
  front,rear,back: integer;
  nTest,n,i: integer;

procedure precalc;
var
  i,j: integer;
  u,v: rec;
begin
  fillchar(f, sizeof(f), 0);
  f[0,0,0] := 1;

  front := 1;  rear := 1;  back := 1;
  q[1].x := 0;  q[1].y := 0;

  for i := 1 to maxn do
    begin
      back := rear;
      while front <= back do
        begin
          u := q[front];
          inc(front);

          for j := 1 to 6 do
            begin
              v.x := u.x + dx[j];
              v.y := u.y + dy[j];
              if f[v.x,v.y,i] = 0 then
                begin
                  inc(rear);
                  q[rear] := v;
                end;
              f[v.x,v.y,i] := f[v.x,v.y,i] + f[u.x,u.y,i - 1];
            end;
        end;
    end;
end;

begin
  precalc;
  readln(nTest);
  for i := 1 to nTest do
    begin
      readln(n);
      writeln(f[0,0,n]);
    end;
end.

Download