提出 #67828205
ソースコード 拡げる
import sys
from typing import List
MOD: int = 10**9 + 7
MAX: int = 200000 # H+Wの最大を考慮して十分大きい上限
fact: List[int] = [1] * (MAX + 1) # fact[i] = i!
inv_fact: List[int] = [1] * (MAX + 1) # inv_fact[i] = (i!)^(-1) mod MOD
def modinv(a: int) -> int:
"""
a^(-1) mod MOD を求める(フェルマーの小定理を使用)
@param a: 逆元を求める数(a ≠ 0)
@return: a の MOD における逆元
"""
return pow(a, MOD - 2, MOD)
def precompute_factorials() -> None:
"""
階乗とその逆元を事前計算して、fact[], inv_fact[] に格納する
"""
for i in range(1, MAX + 1):
fact[i] = fact[i - 1] * i % MOD
inv_fact[MAX] = modinv(fact[MAX])
for i in range(MAX - 1, -1, -1):
inv_fact[i] = inv_fact[i + 1] * (i + 1) % MOD
def comb(n: int, r: int) -> int:
"""
nCr (mod MOD) を返す
@param n: 総数(0 <= r <= n <= MAX)
@param r: 選ぶ数
@return: nCr % MOD
"""
if r < 0 or r > n:
return 0
return fact[n] * inv_fact[r] % MOD * inv_fact[n - r] % MOD
def count_grid_paths(H: int, W: int) -> int:
"""
格子経路数を計算:C(H+W-2, H-1)
@param H: 行数
@param W: 列数
@return: 経路数(mod 1e9+7)
"""
precompute_factorials()
return comb(H + W - 2, H - 1)
def main() -> None:
"""
標準入力を読み取り、格子経路数を出力する
"""
H_str, W_str = sys.stdin.read().split()
H: int = int(H_str)
W: int = int(W_str)
result: int = count_grid_paths(H, W)
print(result)
if __name__ == "__main__":
main()
提出情報
| 提出日時 | |
|---|---|
| 問題 | B30 - Combination 2 |
| ユーザ | myoshizumi |
| 言語 | Python (CPython 3.11.4) |
| 得点 | 1000 |
| コード長 | 1723 Byte |
| 結果 | AC |
| 実行時間 | 63 ms |
| メモリ | 26292 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 1000 / 1000 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | sample_01.txt, sample_02.txt, sample_03.txt |
| All | sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| sample_01.txt | AC | 62 ms | 26264 KiB |
| sample_02.txt | AC | 62 ms | 26212 KiB |
| sample_03.txt | AC | 62 ms | 26268 KiB |
| test_01.txt | AC | 62 ms | 26268 KiB |
| test_02.txt | AC | 62 ms | 26208 KiB |
| test_03.txt | AC | 62 ms | 26224 KiB |
| test_04.txt | AC | 61 ms | 26112 KiB |
| test_05.txt | AC | 62 ms | 26292 KiB |
| test_06.txt | AC | 62 ms | 26212 KiB |
| test_07.txt | AC | 62 ms | 26264 KiB |
| test_08.txt | AC | 63 ms | 26192 KiB |