BOI 2014 - Demarcation

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2500 (p) Thời gian: 0.5s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Hòn đảo Bytopia từng được trị vì trong một thời gian dài bởi vị vua công minh Byteasar. Sau khi nhà vua đột ngột qua đời, hai người con sinh đôi Biteon và Byteon không thể thống nhất ai sẽ lên ngôi. Họ quyết định chia hòn đảo thành hai tỉnh để cai trị riêng.

Trên bản đồ hình chữ nhật, hòn đảo có dạng một đa giác gồm \(N\) đỉnh. Mỗi cạnh của đa giác song song với một cạnh của bản đồ; hai cạnh liên tiếp luôn vuông góc. Các cạnh không cắt hay chạm nhau, ngoại trừ đầu mút chung của hai cạnh liên tiếp.

Biteon và Byteon muốn dùng đúng một đoạn thẳng nằm trong đa giác, song song với một cạnh của bản đồ, để chia hòn đảo thành hai đa giác bằng nhau. Hai đa giác được gọi là bằng nhau nếu có thể biến đổi đa giác này thành đa giác kia bằng một tổ hợp các phép đối xứng, quay và tịnh tiến. Tọa độ các đỉnh và hai đầu mút của đoạn chia đều phải là số nguyên.

Hãy xác định liệu có thể chia hòn đảo thành hai phần bằng nhau bằng một đoạn thẳng nằm ngang hoặc thẳng đứng hay không. Nếu có, hãy tìm một đoạn như vậy.

Dữ liệu vào

Dòng đầu chứa số nguyên \(N\), số đỉnh của đa giác.

Dòng thứ \(i\) trong \(N\) dòng tiếp theo chứa hai số nguyên \(X_i,Y_i\), tọa độ đỉnh thứ \(i\).

Các đỉnh được cho theo thứ tự trên biên đa giác. Các cạnh là đoạn nối đỉnh \(i\) với đỉnh \(i+1\) với \(1 \le i<N\), cùng đoạn nối đỉnh \(N\) với đỉnh \(1\). Hai cạnh liên tiếp luôn vuông góc.

Dữ liệu ra

Nếu có cách chia hợp lệ với hai đầu mút \((x_1,y_1)\)\((x_2,y_2)\), in bốn số nguyên \(x_1,y_1,x_2,y_2\) trên một dòng, cách nhau bởi dấu cách. Đoạn chia phải nằm ngang hoặc thẳng đứng, tức là \(x_1=x_2\) hoặc \(y_1=y_2\). Đoạn phải nằm trong đa giác và chỉ hai đầu mút của nó được chạm biên đa giác. Hai phần thu được phải là hai đa giác bằng nhau. Có thể in bất kỳ cách chia hợp lệ nào.

Nếu không có cách chia như vậy, in NO.

Ràng buộc

  • \(4 \le N \le 100\,000\).
  • \(0 \le X_i,Y_i \le 10^9\) với mọi \(1 \le i \le N\).
  • Đa giác thỏa mãn các điều kiện hình học đã mô tả; hai đầu mút của đoạn chia phải có tọa độ nguyên.

Phân nhóm

  1. 12 điểm: \(4 \le N \le 100\,000\). Mọi đường thẳng nằm ngang hoặc thẳng đứng chia cắt đa giác đều chia nó thành đúng hai phần.
  2. 15 điểm: \(4 \le N \le 200\).
  3. 23 điểm: \(4 \le N \le 2000\).
  4. 50 điểm: \(4 \le N \le 100\,000\).

Ví dụ

Ví dụ 1

Input
10
0 0
1 0
1 1
3 1
3 5
2 5
2 3
1 3
1 2
0 2
Output
1 2 3 2
Giải thích

Đoạn nối \((1,2)\) với \((3,2)\) chia đa giác thành hai phần bằng nhau. Kết quả 3 2 1 2 cũng hợp lệ.

Ví dụ 2

Input
6
0 0
1 0
1 1
2 1
2 2
0 2
Output
NO
Giải thích

Không thể chia hòn đảo này thành hai phần bằng nhau theo yêu cầu.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: