Submission #3981441
Source Code Expand
H, W, N = map(int, input().split())
P = [list(map(int, input().split())) for i in range(N)]
P.sort(reverse=1)
MOD = 10**9 + 7
fact = [1]*(H+W+1)
rfact = [1]*(H+W+1)
for i in range(H+W):
fact[i+1] = r = fact[i] * (i+1) % MOD
rfact[i+1] = pow(r, MOD-2, MOD)
def comb(n, k):
return fact[n] * rfact[k] * rfact[n-k] % MOD
dp = [0]*N
for i in range(N):
r, c = P[i]
res = comb(H - r + W - c, H - r)
for j in range(i):
r0, c0 = P[j]
if not r <= r0 or not c <= c0:
continue
res -= comb(r0-r + c0-c, r0-r) * dp[j] % MOD
dp[i] = res % MOD
ans = comb(H+W-2, H-1)
for i in range(N):
r0, c0 = P[i]
ans -= comb(r0+c0-2, r0-1) * dp[i] % MOD
print(ans % MOD)
Submission Info
| Submission Time | |
|---|---|
| Task | Y - Grid 2 |
| User | yaketake08 |
| Language | PyPy3 (2.4.0) |
| Score | 100 |
| Code Size | 748 Byte |
| Status | AC |
| Exec Time | 1315 ms |
| Memory | 49880 KiB |
Judge Result
| Set Name | All | ||
|---|---|---|---|
| Score / Max Score | 100 / 100 | ||
| Status |
|
| Set Name | Test Cases |
|---|---|
| All | 0_00, 0_01, 0_02, 0_03, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15, 1_16, 1_17 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 0_00 | AC | 170 ms | 38256 KiB |
| 0_01 | AC | 169 ms | 38256 KiB |
| 0_02 | AC | 167 ms | 38256 KiB |
| 0_03 | AC | 335 ms | 41840 KiB |
| 1_00 | AC | 169 ms | 38256 KiB |
| 1_01 | AC | 177 ms | 38256 KiB |
| 1_02 | AC | 338 ms | 41840 KiB |
| 1_03 | AC | 337 ms | 41840 KiB |
| 1_04 | AC | 169 ms | 38256 KiB |
| 1_05 | AC | 374 ms | 45784 KiB |
| 1_06 | AC | 1039 ms | 49368 KiB |
| 1_07 | AC | 1057 ms | 49368 KiB |
| 1_08 | AC | 1315 ms | 49368 KiB |
| 1_09 | AC | 530 ms | 48728 KiB |
| 1_10 | AC | 1018 ms | 49752 KiB |
| 1_11 | AC | 985 ms | 49752 KiB |
| 1_12 | AC | 1025 ms | 49752 KiB |
| 1_13 | AC | 1027 ms | 49880 KiB |
| 1_14 | AC | 1021 ms | 49624 KiB |
| 1_15 | AC | 1014 ms | 49880 KiB |
| 1_16 | AC | 1014 ms | 49496 KiB |
| 1_17 | AC | 1015 ms | 49880 KiB |