結果
問題 | No.117 組み合わせの数 |
ユーザー | 草苺奶昔 |
提出日時 | 2023-02-24 19:46:00 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,599 ms / 5,000 ms |
コード長 | 1,049 bytes |
コンパイル時間 | 505 ms |
コンパイル使用メモリ | 82,656 KB |
実行使用メモリ | 107,968 KB |
最終ジャッジ日時 | 2024-09-13 03:53:34 |
合計ジャッジ時間 | 3,855 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ソースコード
MOD = int(1e9 + 7) N = int(2e6) + 10 fac = [1] * (N + 1) ifac = [1] * (N + 1) for i in range(1, N + 1): fac[i] = fac[i - 1] * i % MOD ifac[i] = ifac[i - 1] * pow(i, MOD - 2, MOD) % MOD def C(n: int, k: int) -> int: if n < 0 or k < 0 or n < k: return 0 return ((fac[n] * ifac[k]) % MOD * ifac[n - k]) % MOD def P(n: int, k: int) -> int: if n < 0 or k < 0 or n < k: return 0 return (fac[n] * ifac[n - k]) % MOD def H(n: int, k: int) -> int: """itertools.combinations_with_replacement""" if n == 0: return 1 if k == 0 else 0 return C(n + k - 1, k) if __name__ == "__main__": import sys sys.setrecursionlimit(int(1e9)) input = lambda: sys.stdin.readline().rstrip("\r\n") T = int(input()) for _ in range(T): s = input() op = s[0] inner = s[2:-1] n, k = map(int, inner.split(",")) if op == "C": print(C(n, k)) elif op == "P": print(P(n, k)) elif op == "H": print(H(n, k))