結果
問題 | No.117 組み合わせの数 |
ユーザー | takeya_okino |
提出日時 | 2019-09-28 14:20:47 |
言語 | Java21 (openjdk 21) |
結果 |
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 |
(要ログイン)
ソースコード
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; } } }