結果
問題 | No.117 組み合わせの数 |
ユーザー | nanae |
提出日時 | 2017-03-28 22:53:43 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
AC
|
実行時間 | 1,280 ms / 5,000 ms |
コード長 | 996 bytes |
コンパイル時間 | 84 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 167,480 KB |
最終ジャッジ日時 | 2024-07-06 13:31:40 |
合計ジャッジ時間 | 3,099 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ソースコード
from sys import stdin def solve(): def p(n, k): if k > n: return 0 return (fact[n] * factinv[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().strip() 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()