Tách mảng gần phân biệt
Đề bài
Mô tả
Ta gọi một mảng là phân biệt (unique) nếu nó không chứa phần tử nào lặp lại.
Ta gọi một mảng độ dài là gần phân biệt (almost unique) nếu có thể biến nó thành một mảng phân biệt bằng cách xóa đi không quá phần tử.
Ví dụ, mảng là gần phân biệt vì sau khi xóa hai phần tử đầu tiên nó trở thành (xóa phần tử, trong khi ). Mảng không gần phân biệt vì cần xóa ít nhất phần tử mới thành phân biệt, mà .
Cho một mảng phân biệt độ dài gồm các số nguyên không âm. Hãy tách thành hai mảng và cùng độ dài , sao cho với mọi ():
- và là các số nguyên không âm;
- .
Đồng thời, cả hai mảng và đều phải là mảng gần phân biệt.
Dữ liệu vào
- Dòng đầu chứa số nguyên .
- Dòng thứ hai chứa số nguyên phân biệt .
Dữ liệu ra
Nếu có thể tách thành hai mảng gần phân biệt, in ra YES ở dòng đầu tiên. Dòng thứ hai in mảng , dòng thứ ba in mảng . Nếu có nhiều đáp án, in ra bất kỳ đáp án hợp lệ nào.
Nếu không thể, in ra NO.
Ràng buộc
- Các phần tử đôi một phân biệt.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 6 12 5 8 3 11 9 |
YES 0 0 2 0 1 3 12 5 6 3 10 6 |
nên mỗi mảng được xóa tối đa phần tử. Mảng : xóa hai số còn phân biệt. Mảng : xóa một số là đủ. Cả hai đều gần phân biệt. |
| 5 4 6 7 5 8 |
YES 0 2 3 0 0 4 4 4 5 8 |
. Mảng : xóa hai số còn . Mảng : xóa hai số còn . Đáp án khác cũng được chấp nhận. |
Bình luận