結果
問題 | No.117 組み合わせの数 |
ユーザー | alexara1123 |
提出日時 | 2019-09-23 02:30:37 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,530 bytes |
コンパイル時間 | 258 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 88,320 KB |
最終ジャッジ日時 | 2024-09-19 04:10:27 |
合計ジャッジ時間 | 1,434 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ソースコード
from fractions import gcd from heapq import* import math from collections import defaultdict, Counter import sys sys.setrecursionlimit(10 ** 7) MOD = 10 ** 9 + 7 def modpow(a, n, mod): res = 1 while n > 0: if n & 1: res = res * a % mod a = a * a % mod n >>= 1 return res def modinv(a, mod): return modpow(a, mod - 2, mod) def nck(a, b): if a < b: return 0 ret = 1 for i in range(b): ret *= (a-i) ret %= MOD ret = ret * modinv(i+1, MOD) % MOD return ret def nhk(a, b): if a < b: return 1 ret = 1 for i in range(b): ret *= (a-i) ret %= MOD ret = ret * modinv(i+1, MOD) % MOD return ret def pnk(a, b): ret = 1 for i in range(b): ret *= (a-i) ret %= MOD return ret def main(): n = int(input()) for i in range(n): s = list(input()) l, r = "", "" lf, rf = False, False for i in range(len(s)): if s[i] == "(": lf = True elif s[i] == ",": l = int(l) rf = True lf = False elif s[i] == ")": r = int(r) elif lf: l += s[i] elif rf: r += s[i] if s[0] == "C": print(nck(l, r)) elif s[0] == "P": print(pnk(l, r)) else: print(nhk(l + r - 1, r)) if __name__ == '__main__': main()