結果
問題 | No.117 組み合わせの数 |
ユーザー | imoni_kawaii |
提出日時 | 2020-01-05 02:23:58 |
言語 | C++14 (gcc 13.2.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 289 ms / 5,000 ms |
コード長 | 1,841 bytes |
コンパイル時間 | 1,556 ms |
コンパイル使用メモリ | 171,404 KB |
実行使用メモリ | 52,288 KB |
最終ジャッジ日時 | 2023-08-14 20:58:14 |
合計ジャッジ時間 | 2,505 ms |
ジャッジサーバーID (参考情報) |
judge14 / judge15 |
コンパイルメッセージ
次のファイルから読み込み: /usr/local/gcc7/include/c++/12.2.0/istream:39, 次から読み込み: /usr/local/gcc7/include/c++/12.2.0/sstream:38, 次から読み込み: /usr/local/gcc7/include/c++/12.2.0/complex:45, 次から読み込み: /usr/local/gcc7/include/c++/12.2.0/ccomplex:39, 次から読み込み: /usr/local/gcc7/include/c++/12.2.0/x86_64-pc-linux-gnu/bits/stdc++.h:54, 次から読み込み: main.cpp:1: メンバ関数 ‘std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char; _Traits = std::char_traits<char>]’ 内, inlined from ‘int main()’ at main.cpp:75:13: /usr/local/gcc7/include/c++/12.2.0/ostream:202:25: 警告: ‘ans’ may be used uninitialized [-Wmaybe-uninitialized] 202 | { return _M_insert(__n); } | ~~~~~~~~~^~~~~ main.cpp: 関数 ‘int main()’ 内: main.cpp:71:8: 備考: ‘ans’ はここで定義されています 71 | ll ans; | ^~~
ソースコード
#include <bits/stdc++.h> #define __dist_rep(a1,a2,a3,f,...) f #define __rep2(i,n) for (int i=0; i<(n); ++i) #define __rep3(i,a,b) for (int i=(a); i<(b); ++i) #define rep(...) __dist_rep(__VA_ARGS__,__rep3,__rep2)(__VA_ARGS__) #define rrep(i,n) for (int i=(n)-1; i>=0; --i) #define fi first #define se second #define debug(x) cerr<<#x<<": "<<(x)<<endl using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<ll> vl; typedef vector<vl> vvl; template <class T> string tostring(const T &x) { ostringstream oss; oss << x; return oss.str(); } template <class T> bool chmax(T &a, T b) { if (a < b) { a = b; return 1; } return 0; } template <class T> bool chmin(T &a, T b) { if (a > b) { a = b; return 1; } return 0; } const int INF = 1e9+5; const ll LINF = 1LL<<60; const ll MOD = 1e9+7; vector<ll> fac, finv, inv; void com_init(int n=2101010) { fac.resize(n+1,1); finv.resize(n+1,1); inv.resize(n+1,1); inv[0] = 0; for (int i=2; i<=n; ++i) { fac[i] = fac[i-1]*i % MOD; inv[i] = -inv[MOD%i]*(MOD/i) % MOD + MOD; finv[i] = finv[i-1]*inv[i] % MOD; } } ll com(int n, int k) { if (n<k || n<0 || k<0) return 0; return fac[n]*(finv[k]*finv[n-k] % MOD) % MOD; } ll perm(int n, int k) { if (n<k || n<0 || k<0) return 0; return fac[n]*finv[n-k]%MOD; } ll H(int n, int k) { if (n==0 && k==0) return 1; return com(n+k-1,k); } int t; int main() { cin>>t; com_init(); rep(q,t) { string s; cin>>s; char c=s[0]; int i; for (i=2; i<s.size(); i++) if (s[i]==',') break; int n=stoi(s.substr(2,i-2)); int k=stoi(s.substr(i+1,s.size()-i-2)); ll ans; if (c=='C') ans=com(n,k); if (c=='P') ans=perm(n,k); if (c=='H') ans=H(n,k); cout << ans << '\n'; } return 0; }