結果
問題 | No.117 組み合わせの数 |
ユーザー | ttkkggww |
提出日時 | 2022-05-07 18:25:58 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 714 ms / 5,000 ms |
コード長 | 1,073 bytes |
コンパイル時間 | 3,524 ms |
コンパイル使用メモリ | 264,156 KB |
実行使用メモリ | 42,856 KB |
最終ジャッジ日時 | 2024-07-06 23:55:33 |
合計ジャッジ時間 | 5,294 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ソースコード
#include<bits/stdc++.h> using namespace std; #include<atcoder/all> using namespace atcoder; using ll = long long; int t; string s; using mint = modint1000000007; mint fac[5050505],facinv[5050505]; void solve(){ int l = 0,r = 0; auto t = s; s.pop_back(); s.erase(s.begin()); s.erase(s.begin()); bool is = false; for(int i = 0;i<s.size();i++){ if(s[i]==','){ is = true; continue; } if(is){ r *= 10; r += s[i]-'0'; }else{ l *= 10; l += s[i]-'0'; } } //cout<<l<<' '<<r<<endl; mint ans; if(t[0]=='C'){ if(l-r<0)ans = 0; else ans = fac[l]*facinv[r]*facinv[l-r]; }else if(t[0]=='P'){ if(l-r>=0)ans = fac[l]*facinv[l-r]; else ans = 0; }else{ if(l-1>=0) ans = fac[l+r-1]*facinv[r]*facinv[l+r-1-r]; else ans =0 ; if(l==0&&r==0)ans = 1; } cout<<ans.val()<<endl; } signed main(){ cin.tie(nullptr); ios::sync_with_stdio(false); fac[0] = 1; fac[1] = 1; facinv[0] = 1; facinv[1] = 1; for(int i = 2;i<5050505;i++){ fac[i] = fac[i-1]*i; facinv[i] = fac[i].inv(); } cin >> t; while(t--){ cin >> s; solve(); } }