結果
問題 | No.117 組み合わせの数 |
ユーザー | toyuzuko |
提出日時 | 2020-03-09 22:07:26 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
AC
|
実行時間 | 1,556 ms / 5,000 ms |
コード長 | 1,178 bytes |
コンパイル時間 | 204 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 179,072 KB |
最終ジャッジ日時 | 2024-11-14 13:42:47 |
合計ジャッジ時間 | 3,670 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ソースコード
class Factorial(): def __init__(self, n, mod): self.mod = mod self.factorial = [0 for _ in range(n + 1)] self.inv = [0 for _ in range(n + 1)] self.factorial[0] = 1 self.inv[0] = 1 for i in range(n): self.factorial[i + 1] = self.factorial[i] * (i + 1) % mod self.inv[n] = pow(self.factorial[n], mod - 2, mod) for i in range(n)[::-1]: self.inv[i] = self.inv[i + 1] * (i + 1) % mod def perm(self, m, k): if m < k: return 0 return self.factorial[m] * self.inv[m - k] % self.mod def comb(self, m, k): if m < k: return 0 return self.factorial[m] * self.inv[k] * self.inv[m - k] % self.mod def hcomb(self, m, k): if m + k == 0: return 1 return self.comb(m + k - 1, k) import sys input = sys.stdin.readline MOD = 1000000007 T = int(input()) F = Factorial(2000000, MOD) A = [] for _ in range(T): s = input() n, k = map(int, s[2:-2].split(',')) if s[0] == 'C': A.append(F.comb(n, k)) elif s[0] == 'P': A.append(F.perm(n, k)) else: A.append(F.hcomb(n, k)) print('\n'.join(map(str, A)))