結果
| 問題 |
No.117 組み合わせの数
|
| ユーザー |
toyuzuko
|
| 提出日時 | 2020-03-09 22:07:26 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 |
ソースコード
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)))
toyuzuko