2 min read

๋ฐฑ์ค€ 2261๋ฒˆ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋‘ ์ 

๋ฌธ์ œ ๋งํฌ

xx์ขŒํ‘œ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ ํ›„ ์•ž์—์„œ๋ถ€ํ„ฐ ์Šค์œ„ํ•‘. ์ง€๊ธˆ๊นŒ์ง€ ์ฐพ์€ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ dd, ์ด๋ฒˆ์— ๊ฑฐ๋ฆฌ๋ฅผ ์žด ์ ์„ pp๋ผ ํ•  ๋•Œ, xx์ขŒํ‘œ, yy์ขŒํ‘œ๊ฐ€ pp์™€ dd์ด์ƒ ์ฐจ์ด๋‚˜๋Š” ์ ์€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. set์— yy์ขŒํ‘œ ๊ธฐ์ค€์œผ๋กœ ์ ์„ ๋„ฃ์–ด ๋‘๋ฉด์„œ, xx์ขŒํ‘œ๊ฐ€ dd๋ณด๋‹ค ๋ฉ€๋ฆฌ ์žˆ๋Š” ์ ์€ ์‚ญ์ œํ•œ๋‹ค. pyโˆ’dโ‰คqyโ‰คpy+dp_y - d \le q_y \le p_y + d ์ธ ์  qq์˜ ๋ฒ”์œ„๋ฅผ lower_bound()๋กœ ์ฐพ์•„์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using ld = long double;

struct Compare {
    bool operator() (const pair<ll, ll>& p1, const pair<ll, ll>& p2) const {
        return make_pair(p1.second, p1.first) < make_pair(p2.second, p2.first);
    }
};

ll square(ll x) {
    return x*x;
}

ll powdist(pair<ll, ll> p1, pair<ll, ll> p2) {
    return square(p1.first - p2.first) + square(p1.second - p2.second);
} 

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n;
    cin >> n;
    vector<pair<ll, ll>> v(n);
    for (auto& [a, b] : v) {
        cin >> a >> b;    
    }
    sort(v.begin(), v.end());

    set<pair<ll, ll>, Compare> st;
    ll dist = powdist(v[0], v[1]);
    st.emplace(v[0]);
    st.emplace(v[1]);
    for (int i = 2, j = 0; i < n; i++) {
        while (j < i && square(v[i].first - v[j].first) >= dist) {
            st.erase(v[j++]);
        }

        ll d = sqrt(dist) + 5;
        auto start = st.lower_bound({-10000, v[i].second - d});
        auto end = st.upper_bound({10000, v[i].second + d});

        for (auto it = start; it != end; it++) {
            dist = min(dist, powdist(v[i], *it));
        }

        st.emplace(v[i]);
    }

    cout << dist;

    return 0;
}

set๋Š” operator()๋ฅผ ์˜ค๋ฒ„๋กœ๋”ฉํ•˜๋Š” Compare ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐ›๋Š”๋‹ค. ์ ์ ˆํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ set์— ์žˆ๋Š” ์›์†Œ๊ฐ€ ์ •๋ ฌ๋˜๋Š” ์ˆœ์„œ๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

IOI KOREA ์œ ํŠœ๋ธŒ์˜ ๋‚˜์ •ํœ˜ ์„ ์ƒ๋‹˜ ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.

๋‹ค์Œ์ฃผ ๋ชฉ์š”์ผ (5์›” 4์ผ)์— ๋‚˜์ •ํœ˜ ์„ ์ƒ๋‹˜์ด ์šฐ๋ฆฌํ•™๊ต์— ICPC ๋Œ€๋น„ ๊ฐ•์—ฐ์€ ํ•˜๋Ÿฌ ์˜ค์‹ ๋‹ค๋Š”๋ฐ ๋„˜ ์‹ ๊ธฐํ•˜๋‹ค. ๋ธ”๋กœ๊ทธ ์ž˜ ๋ณด๊ณ  ์žˆ๋‹ค๊ณ  ์–˜๊ธฐํ•ด์•ผ๊ฒ ๋‹ค.