JOI 2023 - Festivals in JOI Kingdom 2
Xem PDFỞ vương quốc JOI, mỗi năm có một lễ hội toàn quốc. Trong thời gian diễn ra lễ hội có tổng cộng \(N\) sự kiện, với lịch trình đã được ấn định. Lịch của \(N\) sự kiện được mô tả bởi hai dãy \(a,b\) có độ dài \(N\), thỏa mãn:
- Mỗi số nguyên từ \(1\) đến \(2N\) xuất hiện trong dãy \(a\) hoặc dãy \(b\).
- \(a_i<b_i\) với \(1\le i\le N\).
- \(a_i<a_{i+1}\) với \(1\le i\le N-1\).
Sự kiện thứ \(i\) bắt đầu sau \(a_i\) phút kể từ khi lễ hội bắt đầu và kết thúc sau \(b_i\) phút kể từ khi lễ hội bắt đầu.
Người tham gia có thể chọn bất kỳ sự kiện nào, nhưng không được tham gia hai sự kiện có thời gian chồng lấn. Lưu ý rằng tất cả các thời điểm bắt đầu và kết thúc của các sự kiện đều khác nhau.
JOI-kun muốn tham gia càng nhiều sự kiện càng tốt. Cho đến năm ngoái, cậu dùng máy tính để chọn các sự kiện theo thuật toán sau:
Với \(i=1,2,\ldots,N\), lần lượt thực hiện:
- Nếu thời gian của sự kiện thứ \(i\) không chồng lấn với thời gian của bất kỳ sự kiện nào đã chọn tham gia trước đó, chọn tham gia sự kiện thứ \(i\).
- Nếu không, không tham gia sự kiện thứ \(i\).
Sau khi học khoa học máy tính, JOI-kun nhận ra thuật toán trên không phải lúc nào cũng cho số sự kiện tham gia lớn nhất. Từ năm nay, cậu sẽ dùng một thuật toán cải tiến, luôn chọn được số sự kiện lớn nhất có thể tham gia.
JOI-kun muốn biết có bao nhiêu trường hợp mà thuật toán cải tiến cho số sự kiện tham gia lớn hơn thuật toán cũ.
Cho số nguyên \(N\) và một số nguyên tố lớn \(P\), hãy đếm số cặp dãy \(a,b\) mô tả lịch của \(N\) sự kiện mà thuật toán cải tiến cho số sự kiện tham gia lớn hơn. Vì kết quả có thể rất lớn, hãy xuất phần dư của kết quả khi chia cho \(P\).
Dữ liệu vào
Đọc từ đầu vào chuẩn theo định dạng:
N P
Dữ liệu ra
Xuất một dòng ra đầu ra chuẩn chứa phần dư khi chia cho \(P\) của số cặp dãy \(a,b\) mô tả lịch của \(N\) sự kiện mà thuật toán cải tiến cho số sự kiện tham gia lớn hơn thuật toán cũ.
Ràng buộc
- \(1\le N\le 20\,000\).
- \(10^8<P<10^9\).
- \(P\) là số nguyên tố.
- Tất cả giá trị đầu vào đều là số nguyên.
Phân nhóm
Mọi nhóm đều tuân theo các ràng buộc chung ở trên.
- \(5\) điểm: \(N\le 5\).
- \(5\) điểm: \(N\le 8\).
- \(27\) điểm: \(N\le 30\).
- \(14\) điểm: \(N\le 300\).
- \(36\) điểm: \(N\le 3\,000\).
- \(13\) điểm: Không có ràng buộc bổ sung.
Ví dụ
Ví dụ 1
Input
3 100000007
Output
2
Giải thích
Chẳng hạn, xét \(a=(1,2,4)\) và \(b=(6,3,5)\). Thuật toán cũ chỉ chọn sự kiện thứ nhất. Thuật toán đúng chọn số sự kiện lớn nhất sẽ chọn sự kiện thứ hai và thứ ba, tức tham gia \(2\) sự kiện. Vì vậy, trong trường hợp này, thuật toán cải tiến cho số sự kiện tham gia lớn hơn.
Các cặp dãy \(a,b\) mà thuật toán cải tiến cho số sự kiện tham gia lớn hơn là:
- \(a=(1,2,4)\), \(b=(6,3,5)\).
- \(a=(1,2,4)\), \(b=(5,3,6)\).
Có \(2\) cặp dãy, nên xuất 2, là phần dư của \(2\) khi chia cho \(100\,000\,007\). Ví dụ này thỏa mãn ràng buộc của tất cả các nhóm.
Ví dụ 2
Input
4 100000007
Output
28
Giải thích
Có \(28\) cặp dãy \(a,b\) thỏa mãn điều kiện, nên xuất 28, là phần dư của \(28\) khi chia cho \(100\,000\,007\). Ví dụ này thỏa mãn ràng buộc của tất cả các nhóm.
Ví dụ 3
Input
15 999999937
Output
935834920
Giải thích
Có \(5\,295\,044\,602\,247\,148\) cặp dãy \(a,b\) thỏa mãn điều kiện. Vì vậy, xuất 935834920, là phần dư của \(5\,295\,044\,602\,247\,148\) khi chia cho \(999\,999\,937\). Ví dụ này thỏa mãn ràng buộc của các nhóm \(3,4,5,6\).
Nguồn
JOI 2022/2023 Spring Training, Contest 1, bài Festivals in JOI Kingdom 2, tác giả 渡邉雄斗.
Bản dịch tiếng Việt từ đề của JCIOI (Ủy ban Olympic Tin học Quốc tế Nhật Bản), theo giấy phép CC BY-SA 4.0.
Kỳ thi:
- JOI 2023 - Tuyển chọn mùa xuân - Ngày 1 (19 Tháng ba, 2023)
Bình luận