fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 30589 (C++) Маска для монстров
최초 업로드: 2025-11-11 15:01:14
최근 수정 시간: 2025-11-11 15:01:14
게시자: rlatjwls3333
카테고리: 백준
조회수: 8
# [Bronze I] Маска для монстров [문제 링크](https://www.acmicpc.net/problem/30589) ## 문제 설명 <p>Монстрам надо спать, но не у всех это легко получается. Так монстру Вадиму, который выглядит как выпуклый многоугольник из $N$ вершин на плоскости, часто мешает свет. У Вадима есть $N$ глаз, по одному в каждой вершине, и чтобы спокойно уснуть, ему понадобится маска для монстров, закрывающая все глаза. Маска для монстров --- это произвольная линия, которая должна вплотную прилегать к каждому глазу и не проходить внутри монстра. В магазине есть самые разные маски, но Вадиму хватит наименьшей по длине. Какой длины будет эта маска?</p> ## 입력 <p>В первой строке дано единственное целое число $N$ --- количество глаз монстра ($3 \le N \le 10^5$).</p> <p>В каждой из следующих $N$ строк через пробел даны по два целых числа $x_i$, $y_i$ --- координаты вершин многоугольника в порядке обхода против часовой стрелки ($-10^9 \le x_i, y_i \le 10^9$).</p> <p>Гарантируется, что многоугольник выпуклый.</p> ## 출력 <p>Выведите наименьшую длину маски, подходящей Вадиму.</p> <p>Ответ будет засчитан, если его абсолютная или относительная погрешность не превосходит $10^{-6}$.</p> ## 풀이 길이의 합에서 가장 짧은 길이를 빼면 됩니다. ``` c++ #include<bits/stdc++.h> using namespace std; double x[100'000], y[100'000]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for(int i=0;i<n;i++) cin >> x[i] >> y[i]; double sum=0, maxD=0; for(int i=0;i<n;i++) { double cur = hypot(x[i]-x[(i+1)%n], y[i]-y[(i+1)%n]); sum += cur; maxD = max(maxD, cur); } cout << setprecision(6) << fixed << sum-maxD; } ```