Chia mảng thành các đoạn khác không
Đề bài
Mô tả
Cho một dãy gồm số nguyên. Bạn cần chia dãy thành một số đoạn liên tiếp (có thể chỉ một đoạn) sao cho:
- Mỗi đoạn có tổng các phần tử khác .
- Ghép các đoạn lần lượt lại theo thứ tự thì thu được đúng dãy ban đầu.
Hãy tìm một cách chia thỏa mãn, hoặc cho biết không tồn tại cách chia nào.
Dữ liệu vào
- Dòng đầu chứa số nguyên : số phần tử của dãy .
- Dòng thứ hai chứa số nguyên : các phần tử của dãy.
Dữ liệu ra
- Nếu không tồn tại cách chia thỏa mãn, in ra một dòng chứa NO.
- Ngược lại, dòng đầu in ra YES. Dòng thứ hai in ra số nguyên : số đoạn được chia. Trong dòng tiếp theo, mỗi dòng in ra hai số nguyên và tương ứng với đoạn con là đoạn thứ . Các giá trị phải thỏa mãn:
- với mọi .
Nếu có nhiều đáp án, in ra bất kỳ đáp án nào.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 1 2 -3 |
YES 2 1 1 2 3 |
Cả dãy có tổng nên không thể để nguyên một đoạn. Chia thành (tổng ) và (tổng ), cả hai đều khác . |
| 1 0 |
NO | Đoạn duy nhất khả dĩ có tổng , không có cách chia nào hợp lệ. |
| 4 1 2 3 -5 |
YES 1 1 4 |
Tổng cả dãy là , nên để nguyên toàn bộ dãy làm một đoạn là hợp lệ. |
| 3 0 0 0 |
NO | Mọi đoạn con đều có tổng . |
Bình luận