提出 #26053504


ソースコード 拡げる

#include <algorithm>
#include <iostream>
#include <vector>

template <class T> std::vector<int> shrink_coordinate(std::vector<T> &a) {
  std::vector<T> b = a;

  std::sort(b.begin(), b.end());
  b.erase(std::unique(b.begin(), b.end()), b.end());

  int N = a.size();

  std::vector<int> res(N);
  for (int i = 0; i < N; i++) {
    res[i] = std::lower_bound(b.begin(), b.end(), a[i]) - b.begin();
  }

  return res;
}

int main() {
  int N, K;
  std::cin >> N >> K;

  std::vector<int> x(2 * N), y(2 * N), d(2 * N);
  for (int i = 0; i < N; i++) {
    int x1, y1, d1, x2, y2, d2;
    std::cin >> x1 >> y1 >> d1 >> x2 >> y2 >> d2;
    x[i] = x1;
    x[i + N] = x2;
    y[i] = y1;
    y[i + N] = y2;
    d[i] = d1;
    d[i + N] = d2;
  }

  std::vector<int> shrink_x = shrink_coordinate(x);
  std::vector<int> shrink_y = shrink_coordinate(y);
  std::vector<int> shrink_d = shrink_coordinate(d);

  int cnt[110][110][110] = {0};
  for (int i = 0; i < N; i++) {
    int shrink_x1 = shrink_x[i];
    int shrink_x2 = shrink_x[i + N];
    int shrink_y1 = shrink_y[i];
    int shrink_y2 = shrink_y[i + N];
    int shrink_d1 = shrink_d[i];
    int shrink_d2 = shrink_d[i + N];
    for (int x = shrink_x1; x < shrink_x2; x++) {
      for (int y = shrink_y1; y < shrink_y2; y++) {
        for (int d = shrink_d1; d < shrink_d2; d++) {
          cnt[x][y][d]++;
        }
      }
    }
  }

  sort(x.begin(), x.end());
  x.erase(unique(x.begin(), x.end()), x.end());
  sort(y.begin(), y.end());
  y.erase(unique(y.begin(), y.end()), y.end());
  sort(d.begin(), d.end());
  d.erase(unique(d.begin(), d.end()), d.end());

  long long ans = 0;
  for (int sx = 0; sx < (int)x.size() - 1; sx++) {
    for (int sy = 0; sy < (int)y.size() - 1; sy++) {
      for (int sd = 0; sd < (int)d.size() - 1; sd++) {
        if (cnt[sx][sy][sd] < K) {
          continue;
        }

        long long x1 = x[sx];
        long long x2 = x[sx + 1];
        long long y1 = y[sy];
        long long y2 = y[sy + 1];
        long long d1 = d[sd];
        long long d2 = d[sd + 1];

        ans += (x2 - x1) * (y2 - y1) * (d2 - d1);
      }
    }
  }

  std::cout << ans << "\n";

  return 0;
}

提出情報

提出日時
問題 E - 魚の生息範囲 (Fish)
ユーザ kira924age
言語 C++ (GCC 9.2.1)
得点 100
コード長 2244 Byte
結果 AC
実行時間 17 ms
メモリ 8736 KiB

ジャッジ結果

セット名 set01 set02 set03 set04 set05
得点 / 配点 20 / 20 20 / 20 20 / 20 20 / 20 20 / 20
結果
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
セット名 テストケース
set01 data1
set02 data2
set03 data3
set04 data4
set05 data5
ケース名 結果 実行時間 メモリ
data1 AC 14 ms 8680 KiB
data2 AC 14 ms 8732 KiB
data3 AC 14 ms 8736 KiB
data4 AC 17 ms 8596 KiB
data5 AC 17 ms 8732 KiB