結果

問題 No.117 組み合わせの数
ユーザー takeya_okinotakeya_okino
提出日時 2019-09-28 12:54:24
言語 Java21
(openjdk 21)
結果
RE  
実行時間 -
コード長 1,428 bytes
コンパイル時間 1,990 ms
コンパイル使用メモリ 77,240 KB
実行使用メモリ 58,100 KB
最終ジャッジ日時 2024-10-02 00:13:55
合計ジャッジ時間 2,854 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

diff #

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 = 1;
      if(c1 == 'C') {
        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') {
        ans = kai[(int)n1];
        ans = (ans * func(kai[(int)n1 -(int) n2], MOD - 2)) % MOD;        
      } else {
        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;        
      }
      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;
    }
  } 
}
0