본문 바로가기
IT/BOJ

백준(BOJ) 16192 Voronoi Diagram Returns *

by 빨강자몽 2018. 10. 7.

# 단순 구현


영어여서 어려워 보이는 것이고 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