Chia lại quà
Đề bài
Mô tả
Có hộp quà và loại quà, các loại được đánh số từ đến . Trong một hộp, tất cả các món quà phải có loại đôi một khác nhau, tức là mỗi hộp là một tập con của .
Số quà trong các hộp hiện đang chênh lệch nhau. Bạn được phép thực hiện các thao tác chuyển: mỗi thao tác lấy một món quà thuộc loại từ hộp và bỏ vào hộp (). Tại thời điểm thực hiện thao tác, hộp phải đang chứa loại , và sau khi bỏ vào thì hộp vẫn không được có hai món quà cùng loại.
Mục tiêu chính là làm cho hiệu giữa số quà của hộp nhiều nhất và hộp ít nhất là nhỏ nhất có thể. Trong tất cả các cách đạt được mục tiêu đó, hãy tìm cách dùng ít thao tác chuyển nhất.
Dữ liệu vào
- Dòng đầu chứa hai số nguyên và là số hộp và số loại quà.
- dòng tiếp theo mô tả các hộp. Dòng thứ bắt đầu bằng số nguyên là số quà trong hộp , tiếp theo là số nguyên đôi một khác nhau trong đoạn là các loại quà có trong hộp đó.
Dữ liệu ra
- Dòng đầu in ra số nguyên là số thao tác ít nhất.
- dòng tiếp theo, mỗi dòng ba số nguyên , , mô tả thao tác chuyển món quà loại từ hộp sang hộp . Các thao tác được in theo đúng thứ tự thực hiện.
Nếu có nhiều đáp án tối ưu, in ra một đáp án bất kỳ.
Ràng buộc
- Tổng
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 5 5 1 2 3 4 5 2 1 2 2 3 4 |
2 1 2 3 1 3 1 |
Tổng cộng có món quà chia cho hộp, nên đích đến là mỗi hộp đúng món và hiệu bằng . Hộp thừa món: chuyển loại sang hộp (hộp chưa có loại ) và loại sang hộp . Kết quả các hộp là , , . |
| 3 7 6 3 5 1 7 6 4 1 1 3 1 2 6 |
2 1 2 3 1 2 4 |
Tổng cộng món quà chia cho hộp, nên hiệu nhỏ nhất là : một hộp có món, hai hộp còn lại có món. Chỉ hộp dư, nó giữ lại món và chuyển món cho hộp . Không thể chuyển loại sang hộp vì hộp đã có loại . |
Bình luận