canuc80k6905·6/50

Đường Biên Ngoài Cùng

Nộp bài trên LQDOJ

Bài 69 · Geometry

Cho điểm phân biệt trên mặt phẳng. Bao lồi của tập điểm là đa giác lồi nhỏ nhất chứa tất cả các điểm đã cho.

Hãy in toàn bộ những điểm đã cho nằm trên biên của bao lồi. Một điểm nằm giữa hai đỉnh cực trị trên cùng một cạnh cũng thuộc biên và bắt buộc phải được in.

Input

  • Dòng đầu chứa số nguyên .
  • dòng tiếp theo, mỗi dòng chứa hai số nguyên - tọa độ một điểm.

Output

  • Dòng đầu in số nguyên - số điểm nằm trên biên bao lồi.
  • Tiếp theo in dòng, mỗi dòng là tọa độ một điểm biên. Các điểm có thể được in theo bất kỳ thứ tự nào, nhưng mỗi điểm phải xuất hiện đúng một lần và không được in điểm nằm trong.

Constraints

  • .
  • .
  • Các điểm đôi một khác nhau.
  • Bao lồi có diện tích dương, tức là không phải mọi điểm đều thẳng hàng.

Scoring

  • Subtask ( điểm): và trị tuyệt đối mọi tọa độ không quá .
  • Subtask ( điểm): không có giới hạn bổ sung.

Example

Test 1

Input

9
0 0
2 0
4 0
4 3
2 3
0 3
2 1
1 2
3 2

Output

6
0 0
2 0
4 0
4 3
2 3
0 3

Giải thích: Sáu điểm được in nằm trên bốn cạnh của hình chữ nhật bao ngoài, trong đó và nằm giữa hai góc nhưng vẫn thuộc biên. Ba điểm còn lại nằm nghiêm ngặt bên trong nên không được in.

Lời giải tóm tắt
  • Ý tưởng: Sắp xếp các điểm theo cặp . Ta xây biên dưới từ trái sang phải: sau khi thêm một điểm, nếu ba điểm cuối tạo một bước ngoặt phải thì điểm ở giữa không thể nằm trên biên dưới và được loại. Biên trên được xây tương tự khi duyệt từ phải sang trái.
  • Ý tưởng: Điểm quan trọng của bài là phải giữ các điểm thẳng hàng trên cạnh bao. Vì vậy vòng lặp chỉ loại khi tích có hướng âm; nếu tích bằng , điểm giữa vẫn được giữ. Sau khi bỏ hai đầu mút bị lặp và ghép hai chuỗi, ta thu được đúng toàn bộ tập điểm biên.
  • Ý tưởng: Sắp xếp tốn thời gian, hai lượt quét tốn và bộ nhớ là . Tích có hướng dùng số nguyên 128 bit.