printРешение

Тема: поиск в ширину
Сложность: средняя

Для решения можно использовать волновой алгоритм, который заключается в следующем. Начальная позиция помечается значением 0. На `i`-ом шаге нужно найти пометку `i-1` и пометить все непомеченные клетки значением `i`.
var
  n,x,y,x1,y1,i,k,m:integer;
  u:array[1..100,1..100] of integer;
procedure xod(x2,y2:integer);
begin
  if (x2<1) or (x2>n) or (y2<1) or (y2>n) then
    exit;
  if u[x2,y2]>=0 then exit;
  u[x2,y2]:=i;
  inc(m);
end;
begin
  read(n,x,y,k);
  m:=1;
  for x1:=1 to n do
    for y1:=1 to n do
      u[x1,y1]:=-1;
  u[x,y]:=0;
  for i:=1 to k do
    for x:=1 to n do 
      for y:=1 to n do
        if u[x,y]=i-1 then
        begin
          xod(x+1,y+2);
          xod(x-1,y+2);
          xod(x+1,y-2);
          xod(x-1,y-2);
          xod(x+2,y+1);
          xod(x-2,y+1);
          xod(x+2,y-1);
          xod(x-2,y-1);
        end;
  writeln(m);
end.
Время работы этого алгоритма равно `O(N^2*K)`, что вполне укладывается в 1 секунду. Время можно уменьшить до `O(N^2)`, если использовать поиск в ширину, и новые отмеченные клетки заносить в очередь
var
  n,x,y,x1,y1,k1,k,q1,q2,m:integer;
  q:array[1..10000] of record x,y:integer; end;
  u:array[1..100,1..100] of integer;
procedure xod(x2,y2:integer);
begin
  if (x2<1) or (x2>n) or (y2<1) or (y2>n) then
    exit;
  if u[x2,y2]>=0 then exit;
  u[x2,y2]:=k1;
  inc(m);
  q[q2].x:=x2;
  q[q2].y:=y2;
  inc(q2);
end;
begin
  read(n,x,y,k);
  q[1].x:=x;
  q[1].y:=y;
  q1:=1;
  q2:=2;
  m:=1;
  for x1:=1 to n do
    for y1:=1 to n do
    u[x1,y1]:=-1;
  u[x,y]:=0;
  while q1<q2 do
  begin
    x:=q[q1].x;
    y:=q[q1].y;
    inc(q1);
    if u[x,y]<k then
    begin
      k1:=u[x,y]+1;
      xod(x+1,y+2);
      xod(x-1,y+2);
      xod(x+1,y-2);
      xod(x-1,y-2);
      xod(x+2,y+1);
      xod(x-2,y+1);
      xod(x+2,y-1);
      xod(x-2,y-1);
    end;
  end;
  writeln(m);
end.
loading