Con nước (Đề tự luyện HSG Tin quốc gia #02 – Bài 1)

Xem dạng PDF

Gửi bài giải

Điểm: 4,00 (OI)
Giới hạn thời gian: 1.0s
PyPy 5.0s
Python 5.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Đề tự soạn
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Output Only, Pascal, PyPy, Python, Scratch, TEXT
⚠️ LƯU Ý: Đây chỉ là cuộc thi thử – các em hãy cố gắng TỰ LỰC làm bài, KHÔNG sử dụng AI, không tra cứu lời giải hay nhờ người khác hỗ trợ, để đánh giá chính xác năng lực thật của bản thân!
🚨 Trong suốt thời gian thi, thầy sẽ LIÊN TỤC KIỂM TRA bài làm của các em. Trường hợp nào bị phát hiện GIAN LẬN sẽ bị XÓA KHỎI CUỘC THI!

🎓 Khóa học Lập trình Thuật toán thi đấu của thầy Nguyễn Việt Nam Sơn – 111 buổi video, kèm cặp cá nhân, luyện thi chuyên Tin · HSG Tin học · Tin học trẻ · đội tuyển quốc gia · Olympic/ICPC. 👉 Xem chi tiết khóa học · Thành tích học viên

📚 Mới ra mắt – Gói giải đề có lời giải chi tiết · chấm bài tự động · thầy hỗ trợ 1 – 1. Nếu còn phân vân về khóa học chính thức, các em và phụ huynh có thể tham khảo các gói giải đề dưới đây để trải nghiệm trước hệ thống làm bài, cách thầy phân tích – giải bài và sự hỗ trợ trực tiếp của thầy:

📞 Đăng ký học: Zalo 0767 666 702 · Facebook Nguyễn Việt Nam Sơn · 🌐 laptrinhthuattoan.blogspot.com


Mùa nước nổi năm nay, thầy Sơn thả cá linh trong một cái đìa nhỏ sát bờ sông Hậu. Giữa đìa thầy cắm một cây sào có khắc vạch ~0, 1, 2, \ldots, H~ để theo dõi mực nước. Mực nước luôn là một số nguyên và phải luôn nằm trong khoảng từ ~1~ đến ~H - 1~: xuống tới vạch ~0~ là đìa cạn, cá chết; lên tới vạch ~H~ là nước tràn bờ, cá theo nước ra sông hết.

Theo kinh nghiệm của dân miền Tây, con nước thay đổi theo từng giờ, mỗi giờ chỉ có đúng một trong ba khả năng:

  • nước lớn: mực nước tăng ~1~ vạch;
  • nước ròng: mực nước giảm ~1~ vạch;
  • nước đứng: mực nước giữ nguyên.

Một kịch bản con nước trong ~N~ giờ là một dãy gồm ~N~ lựa chọn như trên (giờ thứ nhất, giờ thứ hai, ..., giờ thứ ~N~). Kịch bản được gọi là an toàn nếu sau mỗi giờ (kể cả giờ cuối cùng) mực nước vẫn nằm trong đoạn ~[1, H - 1]~.

Thầy Sơn đang lên kế hoạch cho ~Q~ đợt nuôi khác nhau, đợt nuôi thứ ~i~ bắt đầu khi mực nước ở vạch ~A_i~ và thầy muốn sau đúng ~N~ giờ mực nước ở vạch ~B_i~ (để kịp tháo nước bắt cá). Với mỗi đợt nuôi, hãy giúp thầy Sơn đếm số kịch bản con nước an toàn bắt đầu ở ~A_i~ và kết thúc ở ~B_i~. Vì kết quả có thể rất lớn, chỉ cần in ra phần dư khi chia cho ~10^9 + 7~.

Dữ liệu vào
  • Dòng đầu tiên chứa ba số nguyên ~N, H, Q~ ~(1 \le N \le 10^6;~ ~2 \le H \le 10^6;~ ~1 \le Q \le 2 \times 10^5)~.
  • ~Q~ dòng tiếp theo, dòng thứ ~i~ chứa hai số nguyên ~A_i, B_i~ ~(1 \le A_i, B_i \le H - 1)~.
Kết quả

Gồm ~Q~ dòng, dòng thứ ~i~ là số kịch bản con nước an toàn của đợt nuôi thứ ~i~, lấy theo modulo ~10^9 + 7~.

Giới hạn (Subtask)
  • Subtask 1 (~20\%~ số điểm): ~N, H, Q \le 300~.
  • Subtask 2 (~20\%~ số điểm): ~N \le 5000~ và ~H > N~.
  • Subtask 3 (~30\%~ số điểm): ~H > N~.
  • Subtask 4 (~30\%~ số điểm): không có ràng buộc gì thêm.

💡 Lưu ý khi nộp bằng Python: các em nên chọn ngôn ngữ PyPy 3 thay vì Python 3 để chương trình chạy nhanh hơn nhiều. Giới hạn thời gian cho Python/PyPy ở bài này là 5 giây (C++: 1 giây).

Sample Input 1

3 3 2
1 1
1 2

Sample Output 1

4
4
Giải thích

Mực nước chỉ được là ~1~ hoặc ~2~: ở vạch ~1~ không được nước ròng (cạn đìa), ở vạch ~2~ không được nước lớn (tràn bờ). Hình dưới liệt kê đủ ~8~ kịch bản an toàn bắt đầu ở vạch ~1~: có ~4~ kịch bản kết thúc ở vạch ~1~ và ~4~ kịch bản kết thúc ở vạch ~2~.

Ví dụ 1: tám kịch bản an toàn trong 3 giờ, xuất phát ở vạch 1

Ví dụ 1: tám kịch bản an toàn trong 3 giờ, xuất phát ở vạch 1

Sample Input 2

4 5 3
1 1
2 4
4 1

Sample Output 2

9
9
4
Giải thích
  • Đợt ~1~: có ~9~ kịch bản, chẳng hạn đứng – đứng – đứng – đứng hoặc lớn – ròng – lớn – ròng.
  • Đợt ~2~: kịch bản lớn – đứng – lớn – đứng ~(2 \to 3 \to 3 \to 4 \to 4)~ là an toàn; còn kịch bản lớn – lớn – lớn – ròng ~(2 \to 3 \to 4 \to 5 \to 4)~ tuy cũng kết thúc ở vạch ~4~ nhưng sau giờ thứ ~3~ nước lên tới vạch ~5 = H~ (tràn bờ) nên không an toàn. Tổng cộng có ~9~ kịch bản an toàn.
  • Đợt ~3~: phải giảm ~3~ vạch trong ~4~ giờ nên gồm ~3~ giờ nước ròng và ~1~ giờ nước đứng; giờ nước đứng có ~4~ vị trí để chọn, nên có ~4~ kịch bản.

Ví dụ 2, đợt 2: một kịch bản an toàn và một kịch bản bị tràn bờ

Ví dụ 2, đợt 2: một kịch bản an toàn và một kịch bản bị tràn bờ

Nguồn: Đề tự luyện HSG Tin học quốc gia (đề tự soạn).


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.