結果
問題 | No.117 組み合わせの数 |
ユーザー | nanae |
提出日時 | 2017-03-28 22:52:02 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 988 bytes |
コンパイル時間 | 92 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 167,680 KB |
最終ジャッジ日時 | 2024-07-06 13:31:37 |
合計ジャッジ時間 | 2,228 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ソースコード
from sys import stdin def solve(): def p(n, k): if k > n: return 0 return (fact[n] * favtinv[n - k]) % mod def c(n, k): if k > n: return 0 return (p(n, k) * factinv[k]) % mod def h(n, k): if n == 0 and k == 0: return 1 return c(n + k - 1, k) mod = 10**9 + 7 lim = 2 * 10**6 fact = [1] * (lim + 1) for i in range(2, lim + 1): fact[i] = (i * fact[i - 1]) % mod factinv = [1] * (lim + 1) factinv[lim] = pow(fact[lim], mod - 2, mod) for i in range(lim - 1, 0, -1): factinv[i] = ((i + 1) * factinv[i + 1]) % mod T = int(stdin.readline()) for tc in range(T): s = stdin.readline() n, k = map(int, s[2:-1].split(',')) if s[0] == 'P': ans = p(n, k) elif s[0] == 'C': ans = c(n, k) else: ans = h(n, k) print(ans) if __name__ == '__main__': solve()