結果
| 問題 |
No.767 配られたジャパリまん
|
| コンテスト | |
| ユーザー |
chonbo0127
|
| 提出日時 | 2021-08-04 11:55:58 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,424 bytes |
| コンパイル時間 | 441 ms |
| コンパイル使用メモリ | 82,688 KB |
| 実行使用メモリ | 183,256 KB |
| 最終ジャッジ日時 | 2024-09-16 15:01:31 |
| 合計ジャッジ時間 | 6,147 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 WA * 2 |
| other | AC * 14 TLE * 1 |
ソースコード
H,W,K = map(int,input().split())
L = [list(map(int,input().split())) for _ in range(K)]
MOD = 10**8+7
factorial = [1, 1]
inverse = [1, 1]
invere_base = [0, 1]
for i in range(2, H+W + 1):
factorial.append((factorial[-1] * i) % MOD)
invere_base.append((-invere_base[MOD % i] * (MOD // i)) % MOD) #逆元
inverse.append((inverse[-1] * invere_base[-1]) % MOD) #階乗逆元
def nCr(n, r):
if (r < 0 or r > n):
return 0
r = min(r, n - r)
return factorial[n] * inverse[r] * inverse[n - r] % MOD
D = [0]*(1<<K)
for i in range(1<<K):
X = []
for j in range(K):
if i&(1<<j):
X.append([L[j][0],L[j][1],L[j][0]+L[j][1]*10**(-11)])
X.sort(key = lambda x:x[2])
X = [X[i][:2] for i in range(len(X))]
a,b = 0,0
ans = 1
for j in range(K):
if i&(1<<j):
na,nb = L[j]
da,db = na-a,nb-b
ans *= nCr(da+db,db)
ans %= MOD
a,b = na,nb
na,nb = H,W
da,db = na-a,nb-b
ans *= nCr(da+db,db)
ans %= MOD
if bin(i).count("1")%2 == 0:
ans *= -1
D[i] = ans%MOD
d = (-D[0])%MOD
D[0] = 0
dp = [D[i] for i in range(1<<K)]
for j in range(K):
ndp = [0]*(1<<K)
for i in range(1<<K):
if i&(1<<j):
ndp[i] = dp[i]+dp[i&(~(1<<j))]
else:
ndp[i] = dp[i]
ndp[i] %= MOD
dp = ndp
for i in range(1<<K):
print((d-dp[i])%MOD)
chonbo0127