[HueICT 2026 - Pro Challenge] Chia dãy
Xem dạng PDF
Gửi bài giải
Điểm:
0,01 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
1G
Input:
stdin
Output:
stdout
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch
Cho một dãy số nguyên dương ~A~ gồm ~n~ phần tử ~a_1, a_2, ..., a_n~. Một đoạn con hợp lệ là một dãy các phần tử liên tiếp của dãy sao cho: Không có bất kỳ giá trị nào xuất hiện nhiều hơn ~m~ lần trong đoạn con đó.
Bạn được phép xóa đi nhiều nhất ~k~ phần tử khỏi dãy ~A~. Sau khi xóa, các phần tử còn lại sẽ giữ nguyên thứ tự tương đối ban đầu và dồn lại thành một dãy mới ~A'~. Nhiệm vụ của bạn là phải phân chia toàn bộ dãy ~A'~ thành các đoạn con liên tiếp hợp lệ (các đoạn con không giao nhau).
Yêu cầu: Hãy tìm cách chọn các phần tử để xóa sao cho tổng số lượng đoạn con hợp lệ sau khi phân chia là ít nhất.
Input
- Dòng đầu tiên chứa ba số nguyên ~n, m, k~ (~1 \le m \le n \le 10^5; k \le 300~);
- Dòng tiếp theo chứa ~n~ số nguyên ~a_1, a_2, ..., a_n~ (~1 \le a_i \le 10^5; 1 \le i \le n~).
Output
- Gồm một số nguyên là số dãy con tối thiểu đạt được.
Ràng buộc
- Subtask 1 (20% số điểm): ~k = 0~.
- Subtask 2 (20% số điểm): ~n \le 1000; k \le 20~.
- Subtask 3 (30% số điểm): ~n \le 10^5; k \le 20~.
- Subtask 4 (30% số điểm): Không có ràng buộc gì thêm.
Sample Input 1
5 1 1
2 2 1 2 3
Sample Output 1
2
Giải thích: * Yêu cầu: Mỗi đoạn con không có phần tử nào xuất hiện quá 1 lần (~m = 1~). Xóa tối đa 1 phần tử (~k = 1~).
- Có thể xóa phần tử ở vị trí thứ 4 (số 2). Mảng sau khi xóa thành ~A' = [2, 2, 1, 3]~.
- Khi đó chia ~A'~ thành 2 đoạn con liên tiếp hợp lệ: ~[2]~ và ~[2, 1, 3]~.
- Không có cách xóa nào giúp ta chia được thành 1 đoạn con duy nhất, nên 2 là kết quả tối ưu.
Bình luận