結果
問題 | No.117 組み合わせの数 |
ユーザー | fiord |
提出日時 | 2015-08-16 00:41:30 |
言語 | C++11 (gcc 11.4.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 844 bytes |
コンパイル時間 | 1,315 ms |
コンパイル使用メモリ | 159,092 KB |
実行使用メモリ | 81,380 KB |
最終ジャッジ日時 | 2024-07-18 09:47:31 |
合計ジャッジ時間 | 4,974 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:23:23: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 23 | int t; fscanf(f,"%d",&t); | ~~~~~~^~~~~~~~~~~ main.cpp:27:23: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 27 | fscanf(f," %c(%d,%d)",&s,&n,&k); | ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h> using namespace std; typedef long long int ll; #define E 1000000007 ll res[10000000]; ll calc(ll a,int b=E-2){ ll ans=1; while(b){ if(b&1) ans=(ans*a)%E; a=(a*a)%E; b>>=1; } return ans; } ll ncm(ll n,ll m){ return (res[n]*calc(res[m])%E)*calc(res[n-m])%E; } int main(){ FILE*f=fopen("in","r"); FILE*g=fopen("out","wt"); res[0]=res[1]=1; for(int i=2;i<10000000;i++) res[i]=i*res[i-1]%E; int t; fscanf(f,"%d",&t); while(t--){ int n,k; char s; fscanf(f," %c(%d,%d)",&s,&n,&k); if(n<k&&s!='H'){ fprintf(g,"0\n"); continue; } switch(s){ case 'C': fprintf(g,"%lld\n",ncm(n,k)); break; case 'P': fprintf(g,"%lld\n",res[n]*calc(res[n-k])%E); break; case 'H': if(n+k==0) fprintf(g,"1\n"); else fprintf(g,"%lld\n",ncm(n+k-1,k)); break; } } return 0; }