結果

問題 No.165 四角で囲え!
ユーザー te-shte-sh
提出日時 2017-02-06 16:42:15
言語 D
(dmd 2.106.1)
結果
WA  
実行時間 -
コード長 1,526 bytes
コンパイル時間 958 ms
コンパイル使用メモリ 120,504 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-06-12 06:54:41
合計ジャッジ時間 6,923 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 211 ms
6,816 KB
testcase_01 AC 1 ms
6,944 KB
testcase_02 AC 1 ms
6,944 KB
testcase_03 AC 1 ms
6,940 KB
testcase_04 AC 1 ms
6,944 KB
testcase_05 AC 301 ms
6,944 KB
testcase_06 AC 63 ms
6,940 KB
testcase_07 AC 1 ms
6,944 KB
testcase_08 AC 1 ms
6,940 KB
testcase_09 WA -
testcase_10 WA -
testcase_11 AC 285 ms
6,944 KB
testcase_12 AC 395 ms
6,944 KB
testcase_13 AC 414 ms
6,940 KB
testcase_14 AC 402 ms
6,940 KB
testcase_15 AC 385 ms
6,940 KB
testcase_16 AC 419 ms
6,940 KB
testcase_17 AC 379 ms
6,940 KB
testcase_18 AC 450 ms
6,940 KB
testcase_19 AC 390 ms
6,944 KB
testcase_20 AC 380 ms
6,940 KB
testcase_21 AC 372 ms
6,940 KB
testcase_22 AC 379 ms
6,944 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.d(54): Deprecation: foreach: loop index implicitly converted from `size_t` to `int`
Main.d(55): Deprecation: foreach: loop index implicitly converted from `size_t` to `int`

ソースコード

diff #

import std.algorithm, std.conv, std.range, std.stdio, std.string;
import std.typecons;  // Tuple, Nullable, BigFlags

void main()
{
  auto rd1 = readln.split, n = rd1[0].to!size_t, b = rd1[1].to!int;
  auto pi = n.iota.map!(_ => readln.split.to!(int[])).map!(rd2 => point(rd2[0], rd2[1], rd2[2])).array;

  auto rd3 = compress(pi), cpi = rd3[0], nx = rd3[1], ny = rd3[2];

  auto r = 0;
  foreach (x0; 0..nx-1)
    foreach (x1; x0+1..nx) {
      auto npi = new int[](ny), pti = new int[](ny);
      foreach (p; cpi)
        if (p.x >= x0 && p.x <= x1) {
          ++npi[p.y];
          pti[p.y] += p.pt;
        }

      auto cnpi = new int[](ny + 1);
      auto cpti = new int[](ny + 1);
      foreach (i; ny.iota) {
        cnpi[i + 1] = npi[i] + cnpi[i];
        cpti[i + 1] = pti[i] + cpti[i];
      }

      auto y0 = 0, y1 = 0;
      while (y1 < ny) {
        if (y0 == y1) {
          ++y1;
        } else {
          auto pt = cpti[y1 + 1] - cpti[y0];
          if (pt <= b) {
            auto np = cnpi[y1 + 1] - cnpi[y0];
            r = max(r, np);
            ++y1;
          } else {
            ++y0;
          }
        }
      }
    }

  writeln(r);
}

auto compress(point[] pi)
{
  auto xi = pi.map!"a.x".array, yi = pi.map!"a.y".array;
  xi.sort().uniq; yi.sort().uniq;

  int[int] mx, my;
  foreach (int i, x; xi) mx[x] = i;
  foreach (int i, y; yi) my[y] = i;

  foreach (ref p; pi) {
    p.x = mx[p.x];
    p.y = my[p.y];
  }

  return tuple(pi, xi.length, yi.length);
}

struct point {
  int x, y, pt;
}
0