結果

問題 No.402 最も海から遠い場所
ユーザー nebukuro09
提出日時 2016-11-04 14:55:55
言語 D
(dmd 2.109.1)
結果
MLE  
実行時間 -
コード長 1,279 bytes
コンパイル時間 1,121 ms
コンパイル使用メモリ 114,472 KB
実行使用メモリ 590,748 KB
最終ジャッジ日時 2024-06-12 04:57:41
合計ジャッジ時間 8,219 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 14 MLE * 1 -- * 4
権限があれば一括ダウンロードができます

ソースコード

diff #

import std.stdio;
import std.array;
import std.string;
import std.conv;
import std.algorithm;
import std.typecons;
import std.range;
import std.random;
import std.math;
import std.container;

void main() {
  auto input = readln.split.map!(to!int);
  int H = input[0];
  int W = input[1];
  auto B = new string[](H+2);

  B[0] = replicate(".", W+2);
  foreach (i; iota(1, H+1))
    B[i] = "." ~ readln.chomp ~ ".";
  B[H+1] = replicate(".", W+2);

  DList!(Tuple!(int, int, int)) queue;
  foreach (i; iota(H+2))
    foreach (j; iota(W+2))
      if (B[i][j] == '.')
        queue.insert(tuple(i, j, 0));
  bool[int][int] visited;

  int ans = 0;
  int r, c, depth, nr, nc;
  int[8] dx = [-1, 0, 1, -1, 1, -1, 0, 1];
  int[8] dy = [-1, -1, -1, 0, 0, 1, 1, 1];
  while (!queue.empty) {
    auto node = queue.front;
    r = node[0];
    c = node[1];
    depth = node[2];
    queue.removeFront;
    if (r in visited && c in visited[r])
      continue;
    ans = max(ans, depth);
    visited[r][c] = true;

    foreach (d; iota(8)) {
      nr = r + dx[d];
      nc = c + dy[d];
      if (nr < 0 || nr >= H+2 || nc < 0 || nc >= W+2)
        continue;
      if (nr in visited && nc in visited[nr])
        continue;
      queue.insert(tuple(nr, nc, depth+1));
    }
  }
  writeln(ans);
}
0