結果
| 問題 | No.117 組み合わせの数 |
| コンテスト | |
| ユーザー |
はむ吉🐹
|
| 提出日時 | 2016-07-27 13:06:58 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,566 bytes |
| 記録 | |
| コンパイル時間 | 480 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 109,952 KB |
| 最終ジャッジ日時 | 2024-11-06 17:55:36 |
| 合計ジャッジ時間 | 2,044 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 1 |
ソースコード
#!/usr/bin/env pypy3
import re
# 参考 #107170
class ModPrime(object):
def __init__(self, p=10**9+7, limit=10**8):
self.fact = [1 for _ in range(limit + 1)]
self.fact_inv = [1 for _ in range(limit + 1)]
self.p = p
self.current_limit = None
self.pre_calc(limit)
def pre_calc(self, limit):
p = self.p
for i in range(1, limit + 1):
self.fact[i] = i * self.fact[i - 1] % p
self.fact_inv[limit] = pow(self.fact[limit], p - 2, p)
for i in range(1, limit + 1)[::-1]:
self.fact_inv[i - 1] = self.fact_inv[i] * i % p
self.current_limit = limit
def perm(self, n, k):
return 0 if n < k else self.fact[n] * self.fact_inv[n - k] % self.p
def combi(self, n, k):
return self.perm(n, k) * self.fact_inv[k] % self.p
def multi_combi(self, n, k):
return 1 if n == k == 1 else self.combi(n + k - 1, k)
def main():
p = 10 ** 9 + 7
limit = 2 * 10 ** 6 + 10
mp = ModPrime(p, limit)
ptn = re.compile(r"(?P<func>[CPH])\((?P<n>[0-9]+),(?P<k>[0-9]+)\)")
t = int(input())
for _ in range(t):
mobj = re.match(ptn, input())
assert mobj is not None
f = mobj.group("func")
n = int(mobj.group("n"))
k = int(mobj.group("k"))
if f == "C":
print(mp.combi(n, k))
elif f == "P":
print(mp.perm(n, k))
elif f == "H":
print(mp.multi_combi(n, k))
else:
assert False
if __name__ == '__main__':
main()
はむ吉🐹