提出 #28441485


ソースコード 拡げる

/*
 * Author: nskybytskyi
 * Time:   2022-01-08 14:00:00
 */

#include <bits/stdc++.h>
using namespace std;

int main() {
  cin.tie(0)->sync_with_stdio(0);

  int n, k;
  cin >> n >> k;

  vector<pair<int, int>> xy(n);
  for (auto& [x, y] : xy) {
    cin >> x >> y;
  }

  map<pair<int, int>, vector<int>> groups;

  for (int i = 0; i < n; ++i) {
    auto [x, y] = xy[i];
    groups[make_pair(x / k, y / k)].push_back(i);
  }

  // We'll check all pairs of points in adjacent groups
  // One may think that this number is quadratic
  // But it turns out that "almost" every such pair works
  // I.e. the number of pairs we chek is O(M)

  set<pair<int, int>> close;

  auto adjacent_groups = [&] (pair<int, int> group) -> vector<pair<int, int>> {
    auto [x, y] = group;
    vector<pair<int, int>> groups;
    for (int x_difference = -1; x_difference <= 1; ++x_difference) {
      for (int y_difference = -1; y_difference <= 1; ++y_difference) {
        groups.emplace_back(x + x_difference, y + y_difference);
      }
    }
    return groups;
  };

  auto distance_squared = [&] (int i, int j) -> int64_t {
    return (xy[i].first - xy[j].first) * 1ll * (xy[i].first - xy[j].first) \
      +  (xy[i].second - xy[j].second) * 1ll * (xy[i].second - xy[j].second);
  };

  for (const auto& [group, points] : groups) {
    for (auto adjacent_group : adjacent_groups(group)) {
      if (groups.count(adjacent_group)) {
        for (auto point : points) {
          for (auto adjacent_point : groups[adjacent_group]) {
            if (distance_squared(point, adjacent_point) <= k * 1ll * k) {
              if (point < adjacent_point) {
                close.emplace(point, adjacent_point);
              }
            }
          }
        }
      }
    }
  }

  cout << close.size() << "\n";
  for (auto [i, j] : close) {
    cout << i + 1 << " " << j + 1 << "\n";
  }

  return 0;
}

提出情報

提出日時
問題 Ex - Enumerate Pairs
ユーザ nika_skybytska
言語 C++ (GCC 9.2.1)
得点 600
コード長 1954 Byte
結果 AC
実行時間 568 ms
メモリ 39880 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 3
AC × 85
セット名 テストケース
Sample sample_01.txt, sample_02.txt, sample_03.txt
All hack.txt, sample_01.txt, sample_02.txt, sample_03.txt, type01_10.txt, type01_11.txt, type01_12.txt, type01_13.txt, type01_14.txt, type01_15.txt, type01_16.txt, type01_17.txt, type01_18.txt, type02_01.txt, type02_03.txt, type02_06.txt, type02_08.txt, type02_09.txt, type02_11.txt, type02_14.txt, type02_16.txt, type03_01.txt, type03_02.txt, type03_03.txt, type03_04.txt, type04_01.txt, type04_02.txt, type04_03.txt, type04_04.txt, type05_13.txt, type05_14.txt, type05_15.txt, type05_16.txt, type05_17.txt, type05_18.txt, type05_19.txt, type05_20.txt, type05_21.txt, type05_22.txt, type05_23.txt, type05_24.txt, type06_01.txt, type06_02.txt, type06_03.txt, type06_04.txt, type06_05.txt, type06_06.txt, type06_07.txt, type06_08.txt, type06_09.txt, type06_10.txt, type07_01.txt, type07_02.txt, type07_03.txt, type07_04.txt, type08_02.txt, type08_03.txt, type08_06.txt, type08_07.txt, type08_10.txt, type08_11.txt, type08_14.txt, type08_15.txt, type08_18.txt, type08_19.txt, type08_22.txt, type08_23.txt, type09_06.txt, type09_07.txt, type10_01.txt, type10_02.txt, type10_03.txt, type10_04.txt, type10_05.txt, type10_06.txt, type10_07.txt, type10_08.txt, type10_09.txt, type10_10.txt, type10_11.txt, type10_12.txt, type11_01.txt, type11_02.txt, type11_03.txt, type11_04.txt
ケース名 結果 実行時間 メモリ
hack.txt AC 410 ms 35832 KiB
sample_01.txt AC 8 ms 3552 KiB
sample_02.txt AC 2 ms 3628 KiB
sample_03.txt AC 2 ms 3568 KiB
type01_10.txt AC 136 ms 22884 KiB
type01_11.txt AC 328 ms 28056 KiB
type01_12.txt AC 341 ms 24704 KiB
type01_13.txt AC 568 ms 38260 KiB
type01_14.txt AC 523 ms 38392 KiB
type01_15.txt AC 444 ms 32624 KiB
type01_16.txt AC 517 ms 38256 KiB
type01_17.txt AC 536 ms 38384 KiB
type01_18.txt AC 467 ms 32620 KiB
type02_01.txt AC 31 ms 6988 KiB
type02_03.txt AC 157 ms 20840 KiB
type02_06.txt AC 132 ms 21288 KiB
type02_08.txt AC 187 ms 19516 KiB
type02_09.txt AC 25 ms 5660 KiB
type02_11.txt AC 166 ms 22688 KiB
type02_14.txt AC 43 ms 8480 KiB
type02_16.txt AC 187 ms 19548 KiB
type03_01.txt AC 285 ms 24148 KiB
type03_02.txt AC 309 ms 27676 KiB
type03_03.txt AC 306 ms 27288 KiB
type03_04.txt AC 307 ms 27360 KiB
type04_01.txt AC 285 ms 26632 KiB
type04_02.txt AC 295 ms 26672 KiB
type04_03.txt AC 292 ms 26672 KiB
type04_04.txt AC 301 ms 26532 KiB
type05_13.txt AC 23 ms 5816 KiB
type05_14.txt AC 17 ms 5044 KiB
type05_15.txt AC 10 ms 3560 KiB
type05_16.txt AC 30 ms 6188 KiB
type05_17.txt AC 6 ms 3608 KiB
type05_18.txt AC 132 ms 19516 KiB
type05_19.txt AC 63 ms 10784 KiB
type05_20.txt AC 141 ms 20532 KiB
type05_21.txt AC 7 ms 3564 KiB
type05_22.txt AC 22 ms 5392 KiB
type05_23.txt AC 18 ms 5008 KiB
type05_24.txt AC 86 ms 13780 KiB
type06_01.txt AC 9 ms 3568 KiB
type06_02.txt AC 2 ms 3496 KiB
type06_03.txt AC 4 ms 3492 KiB
type06_04.txt AC 2 ms 3628 KiB
type06_05.txt AC 2 ms 3540 KiB
type06_06.txt AC 2 ms 3616 KiB
type06_07.txt AC 2 ms 3468 KiB
type06_08.txt AC 2 ms 3564 KiB
type06_09.txt AC 2 ms 3612 KiB
type06_10.txt AC 2 ms 3472 KiB
type07_01.txt AC 2 ms 3540 KiB
type07_02.txt AC 2 ms 3504 KiB
type07_03.txt AC 2 ms 3544 KiB
type07_04.txt AC 2 ms 3596 KiB
type08_02.txt AC 407 ms 35440 KiB
type08_03.txt AC 412 ms 35572 KiB
type08_06.txt AC 420 ms 35568 KiB
type08_07.txt AC 420 ms 35436 KiB
type08_10.txt AC 417 ms 35448 KiB
type08_11.txt AC 415 ms 35568 KiB
type08_14.txt AC 417 ms 35504 KiB
type08_15.txt AC 409 ms 35568 KiB
type08_18.txt AC 428 ms 35440 KiB
type08_19.txt AC 412 ms 35448 KiB
type08_22.txt AC 417 ms 35560 KiB
type08_23.txt AC 439 ms 35440 KiB
type09_06.txt AC 4 ms 3600 KiB
type09_07.txt AC 2 ms 3628 KiB
type10_01.txt AC 471 ms 39792 KiB
type10_02.txt AC 474 ms 39880 KiB
type10_03.txt AC 469 ms 39800 KiB
type10_04.txt AC 424 ms 39776 KiB
type10_05.txt AC 420 ms 39792 KiB
type10_06.txt AC 425 ms 39792 KiB
type10_07.txt AC 432 ms 39796 KiB
type10_08.txt AC 420 ms 39792 KiB
type10_09.txt AC 415 ms 39792 KiB
type10_10.txt AC 430 ms 39812 KiB
type10_11.txt AC 431 ms 39796 KiB
type10_12.txt AC 421 ms 39792 KiB
type11_01.txt AC 254 ms 24984 KiB
type11_02.txt AC 219 ms 24944 KiB
type11_03.txt AC 224 ms 24972 KiB
type11_04.txt AC 263 ms 25096 KiB