Problem ID:
gridpath
Points:
3.2 (partial)
Time limit:
1.0s
Memory limit:
512M
Input:
stdin
Output:
stdout
Author:
Problem source:
Problem types
Allowed languages
C, C++, Golang, Java, Pascal, Perl, Python, Rust
Cho một bảng lưới gồm ~H~ dòng, ~W~ cột. Ô ở dòng thứ ~i~, cột thứ ~j~ được kí hiệu là ~(i, j)~. Bảng lưới có chứa ~N~ ô tường ~(r_1, c_1), (r_2, c_2), \dots, (r_N, c_N)~, các ô còn lại đều là ô trống. Bạn Đình sẽ di chuyển bắt đầu từ ô ~(1, 1)~ đến ~(H, W)~. Khi ở ô ~(i, j)~, Đình có thể di chuyển đến ô ~(i+1, j)~ và ô ~(i, j+1)~ nếu các ô đó còn nằm trong bảng.
Hãy đếm số cách di chuyển của Đình từ ~(1, 1)~ đến ~(H, W)~ sao cho không đi vào các ô tường. In ra phần dư của đáp án khi chia cho ~10^9+7~
Dữ liệu vào đảm bảo các ô ~(1, 1)~ và ~(H, W)~ đều là ô trống.
Input
- Dòng đầu tiên chứa ba số nguyên ~H, W, N~ ~(1 \leq H, W \leq 10^5, 1\leq N \leq 3000)~.
- ~N~ dòng tiếp theo. dòng thứ ~i~ chứa hai số nguyên ~r_i, c_i~ ~(1 \leq r_i \leq H, 1 \leq c_i \leq H)~, mô tả ô tường thứ ~i~.
Output
In số lượng đường đi từ ~(1, 1)~ đến ~(H, W)~ theo modulo ~10^9+7~.
Scoring
- Subtask 1 ~(30\%)~: ~H, W \leq 5000~.
- Subtask 2 ~(15\%)~: ~N = 1~.
- Subtask 3 ~(15\%)~: ~N \leq 20~.
- Subtask 4 ~(40\%)~: Không có ràng buộc gì thêm.
Sample Input 1
3 4 2
2 2
1 4
Sample Output 1
3
Sample Input 2
5 2 2
2 1
4 2
Sample Output 2
0
Sample Input 3
5 5 4
3 1
3 5
1 3
5 3
Sample Output 3
24
Sample Input 4
100000 100000 1
50000 50000
Sample Output 4
123445622
Giải thích
Ở ví dụ 1, ta có ~3~ đường đi như sau
Comments