Chọn Tướng
Đề bài
Mô tả
Có hai đội, mỗi đội gồm người chơi, và tổng cộng vị tướng cần được chia cho hai đội. Hai đội lần lượt chọn tướng: đầu tiên đội chọn một tướng, sau đó đội chọn, rồi lại đến đội , và cứ thế xen kẽ. Mỗi tướng sau khi được chọn sẽ không còn để đội nào chọn nữa. Sau lượt, mỗi đội có đúng tướng.
Sức mạnh của tướng thứ là . Mỗi đội muốn tối đa hoá tổng sức mạnh các tướng của đội mình.
Ngoài ra có cặp khắc chế: khi một đội chọn một tướng thuộc một cặp khắc chế thì ngay ở lượt kế tiếp, đội kia buộc phải chọn tướng còn lại của cặp đó. Mỗi tướng thuộc nhiều nhất một cặp khắc chế.
Bạn điều khiển đội . Chương trình chấm sẽ điều khiển đội còn lại và có thể chơi không tối ưu; trong trường hợp đó bạn phải tận dụng để đạt tổng sức mạnh lớn nhất có thể. Nói chính xác: nếu tồn tại một chiến lược bảo đảm cho bạn đạt tổng sức mạnh ít nhất là bất kể đội kia chọn thế nào, thì bạn phải đạt được ít nhất .
Dữ liệu vào
- Dòng đầu chứa hai số nguyên và .
- Dòng thứ hai chứa số nguyên .
- dòng tiếp theo, mỗi dòng chứa hai số nguyên và () mô tả một cặp khắc chế. Mỗi tướng xuất hiện nhiều nhất một lần trong danh sách này.
- Dòng cuối chứa số nguyên (đội mà bạn điều khiển).
Các tướng được đánh số từ đến theo thứ tự trong dữ liệu vào.
Dữ liệu ra
Đây là bài toán tương tác. Bạn không đọc trọn dữ liệu một lần rồi in kết quả, mà trao đổi qua lại với hệ thống theo giao thức bên dưới.
Giao thức tương tác
Trò chơi diễn ra trong lượt. Ở mỗi lượt của bạn, in ra một số nguyên () là chỉ số tướng bạn chọn. Tướng này phải chưa được chọn và phải tuân thủ luật cặp khắc chế (nếu bạn đang bị buộc phải chọn tướng còn lại của một cặp thì bắt buộc chọn đúng tướng đó).
Ở mỗi lượt của đội kia, đọc một số nguyên () là chỉ số tướng mà đội kia chọn.
Nếu bạn đi trước, ngược lại bạn đi sau. Sau lượt cuối cùng, kết thúc chương trình mà không in gì thêm.
Quan trọng: Sau mỗi lần in ra, bạn phải flush output:
- C++:
cout << endl;hoặccout.flush(); - Python:
print(..., flush=True)
Nếu bạn thực hiện một lượt không hợp lệ, hệ thống sẽ kết thúc và bạn nhận kết quả sai.
Ràng buộc
- Bảo đảm mỗi tướng thuộc nhiều nhất một cặp khắc chế.
Ví dụ
| Chương trình | Hệ thống | Giải thích |
|---|---|---|
| 3 1 1 2 3 4 5 6 2 6 1 |
Đọc dữ liệu: , , cặp khắc chế , bạn là đội . | |
| 6 | Bạn chọn tướng (mạnh nhất, sức mạnh ); vì thuộc cặp nên đội kia bị buộc chọn . | |
| 2 | Đội kia buộc phải chọn tướng . | |
| 5 | Bạn chọn tướng . | |
| 4 | Đội kia chọn tướng . | |
| 3 | Bạn chọn tướng . | |
| 1 | Đội kia chọn tướng . Tổng của bạn là . |
| Chương trình | Hệ thống | Giải thích |
|---|---|---|
| 3 1 1 2 3 4 5 6 1 5 2 |
, , cặp khắc chế , bạn là đội . | |
| 6 | Đội kia đi trước, chọn tướng . | |
| 5 | Bạn chọn tướng ; vì thuộc cặp nên đội kia bị buộc chọn . | |
| 1 | Đội kia buộc phải chọn tướng . | |
| 4 | Bạn chọn tướng . | |
| 3 | Đội kia chọn tướng . | |
| 2 | Bạn chọn tướng . Tổng của bạn là . |
Bình luận