結果
問題 | No.117 組み合わせの数 |
ユーザー |
![]() |
提出日時 | 2025-03-20 21:21:51 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 155 ms / 5,000 ms |
コード長 | 1,916 bytes |
コンパイル時間 | 197 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 125,340 KB |
最終ジャッジ日時 | 2025-03-20 21:22:38 |
合計ジャッジ時間 | 1,064 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 1 |
ソースコード
import sysMOD = 10**9 + 7def main():input = sys.stdin.read().split()T = int(input[0])queries = input[1:T+1]MAX = 2 * 10**6# Precompute factorial and inverse factorial modulo MOD up to MAXfact = [1] * (MAX + 1)for i in range(1, MAX + 1):fact[i] = fact[i-1] * i % MODinv_fact = [1] * (MAX + 1)inv_fact[MAX] = pow(fact[MAX], MOD-2, MOD)for i in range(MAX - 1, -1, -1):inv_fact[i] = inv_fact[i+1] * (i + 1) % MODresults = []for s in queries:func = s[0]rest = s[2:-1].split(',')n = int(rest[0])k = int(rest[1])if func == 'C':if k < 0 or n < k:results.append(0)else:if k == 0:results.append(1)else:res = fact[n] * inv_fact[k] % MODres = res * inv_fact[n - k] % MODresults.append(res)elif func == 'P':if k < 0 or n < k:results.append(0)else:res = fact[n] * inv_fact[n - k] % MODresults.append(res)elif func == 'H':if n == 0:results.append(1 if k == 0 else 0)else:m = n + k - 1if k < 0 or m < k:results.append(0)else:if k == 0:results.append(1)else:if m > MAX:results.append(0)else:res = fact[m] * inv_fact[k] % MODres = res * inv_fact[m - k] % MODresults.append(res)sys.stdout.write('\n'.join(map(str, results)) + '\n')if __name__ == '__main__':main()