Thi Giữa Kỳ

Xem PDF



Dạng bài
Ngôn ngữ cho phép
C++
Điểm: 10 Thời gian: 40.0s Bộ nhớ: 119M Input: bàn phím Output: màn hình

Nguyên là một học sinh giỏi trong lớp. Sắp tới, Nguyên phải thi để nhận chứng chỉ cho m môn học trong vòng n ngày. Mỗi môn học được đánh số từ 1 đến m và để nhận được chứng chỉ thì cần bỏ ra một số ngày ôn tập và các ngày ôn tập không cần liên tiếp. Một ngày Nguyên có thể tham gia ôn tập, ôn tập hoặc nghỉ ngơi.
Bạn được biết lịch tổ chức các kì thi của m môn học sẽ diễn ra trong vòng n ngày. Hãy giúp Nguyên lên lịch sao cho số ngày cần là ít nhất để có thể lấy được m chứng chỉ.

Yêu cầu: Tìm số ngày ít nhất để Nguyên có thể lấy được tất cả các chứng chỉ trong vòng n ngày, hoặc trả về -1 nếu không thể.

Dữ liệu: nhập dữ liệu gồm
• Dòng đầu tiên gồm 2 số nguyên n, m (1 ≤ n, m ≤ 10^5).
• Dòng tiếp theo gồm n số nguyên x1, x2, ..., xn, với xi (0 ≤ xi ≤ m) thể hiện cho ngày thứ i có kì thi để lấy chứng chỉ xi. Nếu xi = 0 thì ngày đó không có kì thi nào được tổ chức.
• Dòng cuối cùng là m số nguyên t1, t2, ..., tm, với ti (1 ≤ ti ≤ 10^5) là số ngày cần ôn tập để lấy được chứng chỉ thứ i.

Kết quả:
• Gồm 1 số duy nhất là số ngày ít nhất để Nguyên có thể nhận được tất cả các chứng chỉ.
• Nếu không thể lấy trong vòng n ngày thì xuất -1.

Ví dụ 1

ĐẦU VÀO

9 2
1 2 1 2 1 2 1 2 2
2 1

ĐẦU RA

5


Bình luận

Không có bình luận nào.