結果
問題 | No.117 組み合わせの数 |
ユーザー |
![]() |
提出日時 | 2019-09-28 14:20:47 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 1,494 ms / 5,000 ms |
コード長 | 1,650 bytes |
コンパイル時間 | 2,200 ms |
コンパイル使用メモリ | 77,428 KB |
実行使用メモリ | 74,032 KB |
最終ジャッジ日時 | 2024-10-02 06:18:43 |
合計ジャッジ時間 | 5,499 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 1 |
ソースコード
import java.util.*;public class Main {public static long MOD = (long)Math.pow(10, 9) + 7;public static void main(String[] args) {Scanner sc = new Scanner(System.in);int t = sc.nextInt();long[] kai = new long[2000001];kai[0] = 1;for(int i = 1; i < 2000001; i++) {kai[i] = (kai[i - 1] * (long)i) % MOD;}for(int i = 0; i < t; i++) {String s = sc.next();char c1 = s.charAt(0);String sub = s.substring(2, s.length() - 1);String[] num = sub.split(",", 0);long n1 = Long.parseLong(num[0]);long n2 = Long.parseLong(num[1]);long ans = 0;if(c1 == 'C') {if(n1 >= n2) {ans = kai[(int)n1];ans = (ans * func(kai[(int)n2], MOD - 2)) % MOD;ans = (ans * func(kai[(int)n1 -(int) n2], MOD - 2)) % MOD;}} else if(c1 == 'P') {if(n1 >= n2) {ans = kai[(int)n1];ans = (ans * func(kai[(int)n1 -(int) n2], MOD - 2)) % MOD;}} else {if(n1 >= 1) {ans = kai[(int)n1 + (int)n2 - 1];ans = (ans * func(kai[(int)n2], MOD - 2)) % MOD;ans = (ans * func(kai[(int)n1 - 1], MOD - 2)) % MOD;} else {if(n2 == 0) {ans = 1;} else {ans = 0;}}}System.out.println(ans);}}public static long func(long a, long x) {if(x == 0) return 1;if(x % 2 == 0) {long t = func(a, x / 2);return (t * t) % MOD;} else {long t = func(a, x / 2);t = (t * t) % MOD;return (t * a) % MOD;}}}