結果
問題 | No.117 組み合わせの数 |
ユーザー | terasa |
提出日時 | 2022-02-18 11:56:34 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,410 bytes |
コンパイル時間 | 250 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 245,888 KB |
最終ジャッジ日時 | 2024-06-29 08:01:31 |
合計ジャッジ時間 | 5,641 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ソースコード
class Combination: def __init__(self, N, p): self.N = N self.p = p self.f = [None] * (N + 1) self.finv = [None] * (N + 1) self.inv = [None] * (N + 1) self.f[0] = 1 self.f[1] = 1 self.finv[0] = 1 self.finv[1] = 1 self.inv[1] = 1 for i in range(2, N + 1): self.f[i] = self.f[i - 1] * i % p self.inv[i] = p - self.inv[p % i] * (p // i) % p self.finv[i] = self.finv[i - 1] * self.inv[i] % p def P(self, n, k): if n < k: return 0 if n < 0 or k < 0: return 0 return self.f[n] * self.finv[n - k] % self.p def C(self, n, k): if n < k: return 0 if n < 0 or k < 0: return 0 return self.f[n] * (self.finv[k] * self.finv[n - k] % self.p) % self.p # 重複組合せ # n種類のものからk個選ぶ def H(self, n, k): return self.C(k + n - 1, k) # https://yukicoder.me/problems/no/117 L = 2000000 p = 10 ** 9 + 7 comb = Combination(L, p) # autopep8: off import re # autopep8: on T = int(input()) regex = r'([CPH])\((\d+),(\d+)\)' for _ in range(T): s = input() _, t, n, k, = re.match(regex, s) n = int(n) k = int(k) if t == 'C': print(comb.C(n, k)) elif t == 'P': print(comb.P(n, k)) else: print(comb.H(n, k))