結果
問題 | No.117 組み合わせの数 |
ユーザー | mits58 |
提出日時 | 2016-07-25 20:24:33 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 3,252 ms / 5,000 ms |
コード長 | 1,298 bytes |
コンパイル時間 | 2,096 ms |
コンパイル使用メモリ | 77,564 KB |
実行使用メモリ | 105,536 KB |
最終ジャッジ日時 | 2024-11-06 16:51:21 |
合計ジャッジ時間 | 8,927 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ソースコード
import java.util.Scanner; public class Main{ static long mod=1000000007; static long pow(long a,long x,long m){ if(x==0) return 1; else if(x%2==0) return pow((a*a)%m,x/2,m)%m; else return (a*pow((a*a)%m,x/2,m))%m; } static long rev(long a,long mod){ if(a%mod==0) return 0; return pow(a,mod-2,mod)%mod; } static long nhr(int n,int r){ if(n==0 && r==0) return 1; return ncr(n+r-1,r); } static long ncr(int n,int r){ if(n<r) return 0; return (((fact[n]*inv[r])%mod)*inv[n-r])%mod; } static long npr(int n,int r){ if(n<r) return 0; return (fact[n]*inv[n-r])%mod; } static long[] fact,inv; public static void main(String[] args){ Scanner sc=new Scanner(System.in); fact=new long[2000001]; inv=new long[2000001]; fact[0]=1; inv[0]=1; fact[1]=1; inv[1]=1; for(long i=2;i<fact.length;i++){ fact[(int)i]=(fact[(int)i-1]*i)%mod; inv[(int)i]=rev(fact[(int)i],mod); } while(sc.hasNext()){ int t=sc.nextInt(); for(int i=0;i<t;i++){ String str=sc.next(); String[] s=(str.substring(2,str.length()-1)).split(","); int n=Integer.valueOf(s[0]),r=Integer.valueOf(s[1]); if(str.charAt(0)=='P') System.out.println(npr(n,r)); else if(str.charAt(0)=='C') System.out.println(ncr(n,r)); else System.out.println(nhr(n,r)); } } } }