JOI 2012 - Jumps

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: 1800 (p) Thời gian: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Kỹ thuật nhảy rất quan trọng đối với ninja. Một nhóm ninja sẽ luyện nhảy trên một hồ lớn.

Trong hồ có \(N\) tảng đá, được đánh số từ \(1\) đến \(N\). Vị trí mỗi tảng đá được xem như một điểm trên mặt phẳng tọa độ hai chiều. Tảng đá thứ \(i\) ở tọa độ \((X_i,Y_i)\).

Các ninja muốn tìm một lộ trình nhảy từ tảng đá này sang tảng đá khác, đi qua mỗi tảng đá đúng một lần, rồi quay lại tảng đá xuất phát sau khi đã đi qua tất cả \(N\) tảng đá. Mỗi bước nhảy là đoạn thẳng nối hai tảng đá.

Để bảo đảm an toàn, lộ trình không được tự cắt. Nói cách khác, khi nhìn hồ từ trên cao, lộ trình không được đi qua cùng một vị trí nhiều lần, ngoại trừ việc quay lại điểm xuất phát để khép kín lộ trình.

Yêu cầu

Cho vị trí của \(N\) tảng đá, hãy tìm một lộ trình thỏa mãn các điều kiện trên, hoặc xác định rằng không tồn tại lộ trình như vậy.

Dữ liệu vào

Đọc từ đầu vào chuẩn:

  • Dòng đầu tiên chứa số nguyên \(N\).
  • Trong \(N\) dòng tiếp theo, dòng thứ \(i\) chứa hai số nguyên \(X_i,Y_i\), phân cách bởi dấu cách, là tọa độ tảng đá thứ \(i\).

Không có hai tảng đá ở cùng một vị trí.

Dữ liệu ra

Nếu có lộ trình hợp lệ, ghi ra đầu ra chuẩn \(N\) dòng. Dòng thứ \(j\) chứa số hiệu tảng đá thứ \(j\) được ghé thăm trong lộ trình. Sau tảng đá được ghi ở dòng cuối, lộ trình quay lại tảng đá được ghi ở dòng đầu; không ghi lại tảng đá xuất phát ở cuối đầu ra. Nếu có nhiều lộ trình hợp lệ, có thể in ra bất kỳ lộ trình nào.

Nếu không tồn tại lộ trình hợp lệ, chỉ in một dòng chứa số 0.

Ràng buộc

  • \(3\le N\le100\,000\).
  • \(0\le X_i\le1\,000\,000\,000\) với mọi \(1\le i\le N\).
  • \(0\le Y_i\le1\,000\,000\,000\) với mọi \(1\le i\le N\).
  • Các cặp tọa độ \((X_i,Y_i)\) đôi một khác nhau.
  • Mọi giá trị trong dữ liệu vào đều là số nguyên.

Phân nhóm

  • \(10\%\) số điểm dành cho các dữ liệu thỏa mãn \(N\le8\).
  • \(20\%\) số điểm dành cho các dữ liệu thỏa mãn \(N\le16\).
  • \(50\%\) số điểm dành cho các dữ liệu thỏa mãn \(N\le1000\).

Ví dụ

Ví dụ 1

Input
12
0 0
0 10
0 20
10 0
10 10
10 20
20 0
20 10
20 20
30 0
30 10
30 20
Output
9
12
11
10
7
4
1
2
3
6
5
8
Giải thích

Có nhiều hơn một lộ trình thỏa mãn yêu cầu. Hình dưới minh họa lộ trình trong đầu ra mẫu.

Ví dụ 2

Input
3
23 7
91 27
40 12
Output
0
Giải thích

Không có lộ trình nào thỏa mãn các điều kiện, nên in ra 0.

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: