提出 #29417326
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void chmin(int& a, int b){ if(a > b) a = b; }
void chmax(int& a, int b){ if(a < b) a = b; }
using T = array<int, 3>;
struct kDTree{
using Iter = vector<T>::iterator;
kDTree *l = nullptr, *r = nullptr;
// 円形クエリのために x / y 座標の最小値と最大値を持つ
int xmin = INT_MAX, xmax = INT_MIN, ymin = INT_MAX, ymax = INT_MIN;
// 1 要素しか持っていない時の index
int idx = -1;
kDTree(Iter begin, Iter end){
// vecqtor<T> で渡してもいいですが、コピーコストがかかるので in-place に
for(auto p = begin; p != end; p++){
auto [x, y, i] = *p;
chmin(xmin, x);
chmax(xmax, x);
chmin(ymin, y);
chmax(ymax, y);
}
const int size = int(end - begin);
if(size == 1) idx = (*begin)[2];
if(size <= 1) return;
// 葉木なので x / y 座標で半分に分けて再帰
auto cen = begin + size / 2;
if(unsigned(xmax - xmin) > unsigned(ymax - ymin)){
// 長い方で分ける (正方形に近い方が効率がいい)
nth_element(begin, cen, end, [](T& a, T& b){ return a[0] < b[0]; });
}
else{
nth_element(begin, cen, end, [](T& a, T& b){ return a[1] < b[1]; });
}
l = new kDTree(begin, cen);
r = new kDTree(cen, end);
}
// sqrt(dx^2 + dy^2) ≤ K
static bool inside(int dx, int dy, int K){
return ll(dx) * dx + ll(dy) * dy <= ll(K) * K;
}
// (x, y) から距離 K 以下の点を f に報告する
template<class F> void get(int x, int y, int K, F f) const {
// [xmin, xmax] * [ymin, ymax] と ((x, y) から半径 K 以内) に共通部分がない
if(!inside(clamp(x, xmin, xmax) - x, clamp(y, ymin, ymax) - y, K)) return;
// 葉なら idx を報告
if(idx != -1){
f(idx);
return;
}
l->get(x, y, K, f);
r->get(x, y, K, f);
}
};
int main(){
cin.tie(nullptr);
ios::sync_with_stdio(false);
int N, K;
cin >> N >> K;
vector<T> A(N);
for(auto& [x, y, i] : A) cin >> x >> y;
for(int i = 0; i < N; i++) A[i][2] = i;
vector<pair<int, int>> ans;
kDTree tree(A.begin(), A.end());
for(auto [x, y, i] : A) tree.get(x, y, K, [&, i = i](int j){ if(i < j) ans.emplace_back(i + 1, j + 1); });
sort(ans.begin(), ans.end());
cout << ans.size() << '\n';
for(auto [x, y] : ans) cout << x << ' ' << y << '\n';
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | Ex - Enumerate Pairs |
| ユーザ | tatyam |
| 言語 | C++ (GCC 9.2.1) |
| 得点 | 600 |
| コード長 | 2614 Byte |
| 結果 | AC |
| 実行時間 | 288 ms |
| メモリ | 30088 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 600 / 600 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 | 196 ms | 26248 KiB |
| sample_01.txt | AC | 5 ms | 3620 KiB |
| sample_02.txt | AC | 2 ms | 3508 KiB |
| sample_03.txt | AC | 3 ms | 3596 KiB |
| type01_10.txt | AC | 103 ms | 7468 KiB |
| type01_11.txt | AC | 182 ms | 17900 KiB |
| type01_12.txt | AC | 173 ms | 19536 KiB |
| type01_13.txt | AC | 267 ms | 29940 KiB |
| type01_14.txt | AC | 273 ms | 29944 KiB |
| type01_15.txt | AC | 225 ms | 27120 KiB |
| type01_16.txt | AC | 270 ms | 29936 KiB |
| type01_17.txt | AC | 271 ms | 30056 KiB |
| type01_18.txt | AC | 223 ms | 26992 KiB |
| type02_01.txt | AC | 28 ms | 4300 KiB |
| type02_03.txt | AC | 94 ms | 8432 KiB |
| type02_06.txt | AC | 86 ms | 7436 KiB |
| type02_08.txt | AC | 128 ms | 12616 KiB |
| type02_09.txt | AC | 17 ms | 3780 KiB |
| type02_11.txt | AC | 102 ms | 8476 KiB |
| type02_14.txt | AC | 32 ms | 4176 KiB |
| type02_16.txt | AC | 126 ms | 12616 KiB |
| type03_01.txt | AC | 134 ms | 15776 KiB |
| type03_02.txt | AC | 184 ms | 18912 KiB |
| type03_03.txt | AC | 182 ms | 18908 KiB |
| type03_04.txt | AC | 187 ms | 18904 KiB |
| type04_01.txt | AC | 141 ms | 24152 KiB |
| type04_02.txt | AC | 140 ms | 24176 KiB |
| type04_03.txt | AC | 142 ms | 24328 KiB |
| type04_04.txt | AC | 142 ms | 24328 KiB |
| type05_13.txt | AC | 18 ms | 3924 KiB |
| type05_14.txt | AC | 14 ms | 3704 KiB |
| type05_15.txt | AC | 7 ms | 3672 KiB |
| type05_16.txt | AC | 19 ms | 3800 KiB |
| type05_17.txt | AC | 5 ms | 3612 KiB |
| type05_18.txt | AC | 81 ms | 7444 KiB |
| type05_19.txt | AC | 43 ms | 5252 KiB |
| type05_20.txt | AC | 80 ms | 7452 KiB |
| type05_21.txt | AC | 7 ms | 3700 KiB |
| type05_22.txt | AC | 15 ms | 3848 KiB |
| type05_23.txt | AC | 18 ms | 3784 KiB |
| type05_24.txt | AC | 52 ms | 5336 KiB |
| type06_01.txt | AC | 7 ms | 3648 KiB |
| type06_02.txt | AC | 2 ms | 3508 KiB |
| type06_03.txt | AC | 2 ms | 3568 KiB |
| type06_04.txt | AC | 2 ms | 3632 KiB |
| type06_05.txt | AC | 2 ms | 3576 KiB |
| type06_06.txt | AC | 1 ms | 3604 KiB |
| type06_07.txt | AC | 3 ms | 3464 KiB |
| type06_08.txt | AC | 2 ms | 3620 KiB |
| type06_09.txt | AC | 4 ms | 3620 KiB |
| type06_10.txt | AC | 3 ms | 3620 KiB |
| type07_01.txt | AC | 2 ms | 3524 KiB |
| type07_02.txt | AC | 2 ms | 3508 KiB |
| type07_03.txt | AC | 2 ms | 3596 KiB |
| type07_04.txt | AC | 2 ms | 3508 KiB |
| type08_02.txt | AC | 212 ms | 29944 KiB |
| type08_03.txt | AC | 214 ms | 30068 KiB |
| type08_06.txt | AC | 222 ms | 29940 KiB |
| type08_07.txt | AC | 222 ms | 29944 KiB |
| type08_10.txt | AC | 222 ms | 29936 KiB |
| type08_11.txt | AC | 224 ms | 29936 KiB |
| type08_14.txt | AC | 227 ms | 29936 KiB |
| type08_15.txt | AC | 230 ms | 29944 KiB |
| type08_18.txt | AC | 221 ms | 29936 KiB |
| type08_19.txt | AC | 229 ms | 29996 KiB |
| type08_22.txt | AC | 226 ms | 30068 KiB |
| type08_23.txt | AC | 231 ms | 29940 KiB |
| type09_06.txt | AC | 8 ms | 3516 KiB |
| type09_07.txt | AC | 2 ms | 3512 KiB |
| type10_01.txt | AC | 274 ms | 29932 KiB |
| type10_02.txt | AC | 285 ms | 30088 KiB |
| type10_03.txt | AC | 284 ms | 29936 KiB |
| type10_04.txt | AC | 281 ms | 29936 KiB |
| type10_05.txt | AC | 281 ms | 29940 KiB |
| type10_06.txt | AC | 285 ms | 29940 KiB |
| type10_07.txt | AC | 285 ms | 29940 KiB |
| type10_08.txt | AC | 286 ms | 29928 KiB |
| type10_09.txt | AC | 282 ms | 29936 KiB |
| type10_10.txt | AC | 288 ms | 29936 KiB |
| type10_11.txt | AC | 286 ms | 30052 KiB |
| type10_12.txt | AC | 286 ms | 29936 KiB |
| type11_01.txt | AC | 136 ms | 26344 KiB |
| type11_02.txt | AC | 135 ms | 26156 KiB |
| type11_03.txt | AC | 134 ms | 26352 KiB |
| type11_04.txt | AC | 141 ms | 26332 KiB |