Площа між зовнішньою та внутрішньою оболонками#6243

Площа між зовнішньою та внутрішньою оболонками

5 секунд
128 мегабайтів
Середня

Дано множину з точок на площині:

S = \{ (x_0, y_0),\ (x_1, y_1),\ \ldots,\ (x_{N-1}, y_{N-1}) \},

Зовнішня оболонка множини — це опукла оболонка : підмножина точок , які, з'єднані відрізками, утворюють опуклий багатокутник найменшої площі, що містить усі точки всередині чи на границі . Точки , що лежать на , але не є вершинами , не входять до опуклої оболонки.

Внутрішня оболонка множини визначається як опукла оболонка множини S - Ho: потрібно видалити з усі точки зовнішньої оболонки , отримати множину S - Ho і побудувати її опуклу оболонку — це й буде .

Наприклад, складається з точок: , B(2.0, 4.0), C(2.0, 2.0), D(1.0, 1.0), E(4.0, 1.0), F(0.0, 0.0), та H(5.0, 0.0). Зовнішня оболонка Ho = \{ F, H, A, F \}. Після видалення з , S - Ho = \{ B, C, D, E, G \}. Внутрішня оболонка Hi = \{ D, G, E, B, D \}. Площа всередині — , всередині — , різниця: 12.5 - 6.0 = 6.5.

Дано множину з точок. Потрібно обчислити площу між зовнішньою оболонкою та внутрішньою оболонкою цієї множини.

Вхідні дані

Вхід складається з декількох наборів. Перший рядок кожного набору містить ідентифікатор та ціле число (N \leq 1000). Наступні рядків містять координати і (через пробіл) точки; кожне та — дійсні числа, |x|,|y| \leq 100.0. Наступний набір іде одразу після попереднього. Рядок з ідентифікатором "ZZ" і N = 0 означає кінець вводу.

Вихідні дані

Для кожного набору даних виведіть рядок:

ProblemID id: area

де — ідентифікатор задачі з вхідних даних, — обчислена площа між та .

Площу виводьте точно з знаками після десяткової крапки.

Приклади

Приклад 1

Loading
Loading