結果
問題 | No.117 組み合わせの数 |
ユーザー |
|
提出日時 | 2022-05-07 18:25:58 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 827 ms / 5,000 ms |
コード長 | 1,073 bytes |
コンパイル時間 | 4,224 ms |
コンパイル使用メモリ | 251,396 KB |
最終ジャッジ日時 | 2025-01-29 04:49:11 |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 1 |
ソースコード
#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(); } }