結果

問題 No.117 組み合わせの数
ユーザー alexara1123alexara1123
提出日時 2019-09-23 02:30:37
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 1,530 bytes
コンパイル時間 1,288 ms
コンパイル使用メモリ 81,456 KB
実行使用メモリ 87,504 KB
最終ジャッジ日時 2023-10-19 07:53:12
合計ジャッジ時間 2,191 ms
ジャッジサーバーID
(参考情報)
judge11 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 RE -
権限があれば一括ダウンロードができます

ソースコード

diff #

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()
0