[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

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.