Chia đoạn thành hai nhóm
Nộp bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
2.0s
Python 3
5.0s
Giới hạn bộ nhớ:
256M
Đầu vào:
stdin
Đầu ra:
stdout
Dạng bài
Ngôn ngữ cho phép
C++, Go, Java, Kotlin, Pascal, Python, Scratch
Cho đoạn thẳng trên trục số. Bạn cần chia toàn bộ các đoạn này thành hai nhóm khác rỗng sao cho không tồn tại cặp đoạn thuộc hai nhóm khác nhau mà có ít nhất một điểm chung. Hai đoạn và được coi là có điểm chung nếu — bao gồm cả trường hợp chỉ chạm đầu mút như và . Mỗi đoạn phải thuộc đúng một trong hai nhóm.
Hãy in ra một cách phân chia hợp lệ, hoặc thông báo rằng không tồn tại cách phân chia.
Để giảm áp lực dữ liệu, mỗi file kiểm thử chứa nhiều truy vấn độc lập.
Dữ liệu vào
- Dòng đầu chứa số nguyên — số truy vấn.
- Mỗi truy vấn được mô tả như sau:
- Dòng đầu chứa số nguyên — số đoạn.
- dòng tiếp theo, dòng thứ chứa hai số nguyên — đoạn thứ .
Dữ liệu ra
Với mỗi truy vấn, in ra trên một dòng:
- Nếu không tồn tại cách phân chia hợp lệ, in .
- Ngược lại, in số nguyên (), trong đó là chỉ số nhóm của đoạn thứ . Nếu có nhiều đáp án, in ra một đáp án bất kỳ.
Ràng buộc
- Tổng trên tất cả truy vấn không vượt quá .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 2 5 5 2 3 3 3 5 2 3 2 3 3 3 3 4 4 5 5 |
2 1 -1 1 2 2 |
Truy vấn 1: hai đoạn rời nhau, mỗi đoạn vào một nhóm. Truy vấn 2: đoạn cắt cả và , nên cả ba phải cùng nhóm không thể có hai nhóm khác rỗng. Truy vấn 3: ba đoạn rời nhau hoàn toàn — chia tuỳ ý miễn cả hai nhóm khác rỗng. |
| 2 4 1 5 2 3 10 12 11 11 2 1 10 5 6 |
1 1 2 2 -1 |
Truy vấn 1: nhóm thành phần liên thông và . Truy vấn 2: đoạn nằm trong chỉ một thành phần. |
Bình luận