Lập lịch tác vụ CPU
Xem dạng PDFMột CPU cần xử lý một mảng các ký tự đại diện cho các tác vụ, mỗi tác vụ được ký hiệu bằng một chữ cái in hoa từ A đến Z. Mỗi tác vụ tốn đúng 1 đơn vị thời gian để hoàn thành.
Để hệ thống không bị quá tải, có một quy định về thời gian nghỉ (cooldown) là ~K~: Bất kỳ hai tác vụ cùng loại (cùng ký tự) nào cũng phải được xử lý cách nhau ít nhất ~K~ đơn vị thời gian. Trong khoảng thời gian chờ đó, CPU có thể xử lý các tác vụ khác loại, hoặc phải nghỉ (Idle) nếu không có tác vụ nào khả dụng.
Hãy tìm khoảng thời gian ngắn nhất để CPU hoàn thành toàn bộ mảng tác vụ này.
Dữ liệu
- Dòng đầu tiên chứa số nguyên dương ~N~ (~1 \le N \le 10^5~) là số lượng tác vụ và số nguyên ~K~ (~0 \le K \le 100~) là thời gian cooldown.
- Dòng thứ hai chứa chuỗi ~S~ độ dài ~N~ chỉ gồm các chữ cái in hoa từ
AđếnZ.
Kết quả
In ra một số nguyên duy nhất là tổng thời gian tối thiểu (bao gồm cả các khoảng Idle) để xử lý hết chuỗi tác vụ.
Ví dụ
Input 1
6 2
AAABBB
Output 1
8
Giải thích: Lịch xử lý tối ưu là A -> B -> Idle -> A -> B -> Idle -> A -> B. Mất tổng cộng 8 đơn vị thời gian.
Input 2
6 0
AAABBB
Output 2
6
Giải thích: ~K = 0~ nên không cần thời gian nghỉ, CPU làm liên tục A->A->A->B->B->B mất 6 đơn vị thời gian.
Bình luận