結果

問題 No.402 最も海から遠い場所
ユーザー nebukuro09nebukuro09
提出日時 2016-11-04 14:55:55
言語 D
(dmd 2.106.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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
13,760 KB
testcase_01 AC 1 ms
6,940 KB
testcase_02 AC 6 ms
6,940 KB
testcase_03 AC 1 ms
6,940 KB
testcase_04 AC 1 ms
6,944 KB
testcase_05 AC 1 ms
6,940 KB
testcase_06 AC 1 ms
6,940 KB
testcase_07 AC 1 ms
6,944 KB
testcase_08 AC 1 ms
6,940 KB
testcase_09 AC 1 ms
6,944 KB
testcase_10 AC 1 ms
6,940 KB
testcase_11 AC 3 ms
6,944 KB
testcase_12 AC 2 ms
6,940 KB
testcase_13 AC 58 ms
12,028 KB
testcase_14 AC 23 ms
6,940 KB
testcase_15 AC 330 ms
58,108 KB
testcase_16 AC 510 ms
77,440 KB
testcase_17 MLE -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
権限があれば一括ダウンロードができます

ソースコード

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