# 단순 구현
영어여서 어려워 보이는 것이고 n, q의 범위가 작아서
query 한 점과 모든 n 점에 대해서 비교하여 거리가 가장 작은 점의 갯수가
(예를들어, 거리가 3이 가장 작다면 3인점이 여러개가 있을 수 이싸.)
1개면 REGION
2개면 LINE
3개 이상이면 POINT가 됩니다.
아 그리고 NONE인 경우는 나올 수가 없다.
# 실수 했던 점
3개가 아니고 3개 이상이어야 한다^^;
#include<iostream> #include<cstdio> #include<cmath> #include<vector> #include<algorithm> using namespace std; typedef long long ll; int n, m; pair<int, int > p[2005], q[250005]; int fun(int x1, int y1, int x2, int y2) { int x = x1 - x2, y = y1 - y2; return x*x + y*y; } int main() { scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) scanf("%d%d", &p[i].first, &p[i].second); for (int i = 0; i < m; i++) scanf("%d%d", &q[i].first, &q[i].second); for (int i = 0; i < m; i++) { int mi = 2123456789; int ans = 0; vector<int> region; for (int j = 0; j < n; j++) { int tmp = fun(q[i].first, q[i].second, p[j].first, p[j].second); if (tmp < mi) { mi = tmp; ans = 1; region.clear(); region.push_back(j); } else if (tmp == mi) { ans++; region.push_back(j); } } sort(region.begin(), region.end()); if (ans == 0) printf("NONE"); else if(ans == 1) { printf("REGION "); for (int j = 0; j < region.size(); j++) printf("%d ",region[j]+1); } else if (ans == 2) { printf("LINE "); for (int j = 0; j < region.size(); j++) printf("%d ", region[j]+1); } else if (ans >= 3) { printf("POINT "); } printf("\n"); } return 0; }
'IT > BOJ' 카테고리의 다른 글
백준(BOJ) 16189 Repetitive Palindrome * (0) | 2018.10.07 |
---|---|
백준(BOJ) 16190 Rising Sun ** (0) | 2018.10.07 |
백준(BOJ) 16174 점프왕 젤리 ** (0) | 2018.10.04 |
백준(BOJ) 16172 나는 친구가 적다 ** (0) | 2018.10.04 |
백준(BOJ) 16169 수행시간 * (0) | 2018.10.04 |