結果
問題 | No.117 組み合わせの数 |
ユーザー | nanae |
提出日時 | 2017-03-28 22:53:43 |
言語 | Python3 (3.11.6 + numpy 1.26.0 + scipy 1.11.3) |
結果 |
AC
|
実行時間 | 993 ms / 5,000 ms |
コード長 | 996 bytes |
コンパイル時間 | 125 ms |
コンパイル使用メモリ | 11,024 KB |
実行使用メモリ | 164,980 KB |
最終ジャッジ日時 | 2023-09-20 18:38:17 |
合計ジャッジ時間 | 2,573 ms |
ジャッジサーバーID (参考情報) |
judge14 / judge11 |
ソースコード
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()