문제
https://codeforces.com/problemset/problem/1486/B
걸린 시간
- 실패
풀이
C++
#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int tc;
cin >> tc;
while(tc--){
int n;
cin >> n;
vector<ll> x(n), y(n);
for(int i = 0; i < n; i++)
cin >> x[i] >> y[i];
sort(all(x));
sort(all(y));
cout << (x[n/2]-x[(n-1)/2]+1)*(y[n/2]-y[(n-1)/2]+1) << "\n";
}
return 0;
}
동부 지역에 있는 n 개의 집 좌표가 주어진다. 모든 집으로부터의 거리가 최소가 되도록 하는 지점에 전시회를 개최하려고 할 때, 전시회를 개최할 수 있는 지점의 개수를 출력하여야 한다.
2차원 좌표는 맨해튼 거리(Manhattan Distance)로 두 x, y 좌표 각각의 차를 절대값으로 바꾼 후 합한 값이 두 지점 사이의 거리이다.
종만북 32 페이지에 나온 예제와 똑같은 문제로 2차원 좌표를 1차원으로 단순화하여 풀 수 있다.
y 축이 모두 0 인 좌표만이 존재한다고 생각했을 때 전시회를 개최할 수 있는 지점의 개수는 집이 짝수개 일 경우 가장 가운데에 있는 두 좌표 와 그 사이 지점 모두가 되고, 홀수개 일 경우는 가운데에 있는 집 하나만이 될 수 있다.
문제의 거리가 맨해튼 거리임을 생각했을 때 이 문제는 x, y 축을 분리하여 두개의 1차원 문제로 생각할 수 있다.
x, y 축 좌표를 분리한 후 정렬하여 각각 전시회를 개최할 수 있는 지점의 개수를 구한다. 구한 두개의 곱이 정답이다.
'Codeforces' 카테고리의 다른 글
Codeforces #1501A Alexey and Train (0) | 2021.03.14 |
---|---|
Codeforces Round #706 (Div. 2) A (0) | 2021.03.11 |
Codeforces #1487B Cat Cycle (0) | 2021.03.09 |
Codeforces #1493B Planet Lapituletti (0) | 2021.03.07 |
Codeforces Round #705 (Div. 2) A (0) | 2021.03.07 |
댓글