※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 15821번 문제인 낚이고 낚아라이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/15821
15821번: 낚이고 낚아라
최소 k개의 유효 낚시터를 확보할 수 있는 최소의 낚시 거리를 계산한 후, 이를 제곱한 값을 출력한다. 소수점 세 번째 자리에서 반올림하여 두 번째 자리까지 출력한다.
www.acmicpc.net
낚시 거리가 D일 때 어떤 낚시터가 유효 낚시터일 필요충분조건은 원점으로부터 해당 낚시터까지 가장 멀리 떨어진 점까지의 거리가 D 이하인 것이다. 그러한 점은 주어진 다각형의 꼭짓점 중에 존재한다는 것이 잘 알려져있다.
위의 성질을 이용해 반복문을 이용하여 각 낚시터가 유효 낚시터이기 위해 필요한 최소 낚시거리를 구하자. 그리고 이를 이용하여 필요한 낚시거리가 작은 K번째 낚시터를 포함시키기에 충분한 최소 낚시거리를 구해 문제를 해결하자. 이는 정렬을 이용하여 쉽게 구해낼 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int N, K;
ll dist[100000];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> K;
for (int i = 0; i < N; i++) {
ll& cur = dist[i];
int P; cin >> P;
while (P--) {
ll x, y; cin >> x >> y;
cur = max(cur, x * x + y * y);
}
}
sort(dist, dist + N);
cout << dist[K - 1] << ".00";
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 18410 // C++] マージ (Merge) (0) | 2023.01.14 |
---|---|
[BOJ 15819 // C++] 너의 핸들은 (0) | 2023.01.13 |
[BOJ 15830 // C++] 싱크홀 (0) | 2023.01.13 |
[BOJ 15829 // C++] Hashing (1) | 2023.01.13 |
[BOJ 6604 // C++] Matrix Chain Multiplication (0) | 2023.01.13 |