제출 #1370331

#제출 시각아이디문제언어결과실행 시간메모리
1370331LIACircle Passing (EGOI24_circlepassing)C++17
14 / 100
188 ms33264 KiB
//
// Created by liasa on 14/05/2026.
//
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define v vector
#define lp(i, s, e) for (ll i = s; i < e; ++i)
#define pll pair<ll, ll>

ll n, m, q;
ll len;

ll dist(ll a, ll b) {
  if (a > b)
    swap(a, b);
  ll dis = min(b - a, a + len - b);
  return dis;
}

ll besti(ll x) {
  if (x < n)
    return x + n;
  else
    return x - n;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  cin >> n >> m >> q;
  len = 2 * n;
  set<ll> s;
  lp(i, 0, m) {
    ll a;
    cin >> a;
    ll b = a + n;
    s.insert(a);
    s.insert(b);
  }

  lp(i, 0, q) {
    ll x, y;
    cin >> x >> y;
    ll sou = x, sink = y;
    ll ans = dist(x, y);
    {
      auto it = s.upper_bound(sou);
      ll bs = besti(*it);
      ll ansi = dist(*it, sou) + dist(bs, sink) + 1;

      if (it != s.begin()) {
        it--;
        bs = besti(*it);
        ansi = min(ansi, 1 + dist(*it, sou) + dist(bs, sink));
      }
      else {
         it = s.end();
         bs = besti(*it);
         ansi = min(ansi, 1 + dist(*it, sou) + dist(bs, sink));
       }

      ans = min(ans, ansi);
    }
    sou = y, sink = x;

    {
      auto it = s.upper_bound(sou);
      ll bs = besti(*it);
      ll ansi = dist(*it, sou) + dist(bs, sink) + 1;

      if (it != s.begin()) {
        it--;
        bs = besti(*it);
        ansi = min(ansi, 1 + dist(*it, sou) + dist(bs, sink));
      }
      else {
         it = s.end();
         bs = besti(*it);
         ansi = min(ansi, 1 + dist(*it, sou) + dist(bs, sink));
       }

      ans = min(ans, ansi);
    }

    cout << ans << '\n';
  }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…