結果
問題 | No.117 組み合わせの数 |
ユーザー | imoni_kawaii |
提出日時 | 2020-01-05 02:23:58 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 317 ms / 5,000 ms |
コード長 | 1,841 bytes |
コンパイル時間 | 1,720 ms |
コンパイル使用メモリ | 172,056 KB |
実行使用メモリ | 52,608 KB |
最終ジャッジ日時 | 2024-05-02 09:05:23 |
合計ジャッジ時間 | 2,796 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
コンパイルメッセージ
In file included from /home/linuxbrew/.linuxbrew/Cellar/gcc@12/12.3.0/include/c++/12/istream:39, from /home/linuxbrew/.linuxbrew/Cellar/gcc@12/12.3.0/include/c++/12/sstream:38, from /home/linuxbrew/.linuxbrew/Cellar/gcc@12/12.3.0/include/c++/12/complex:45, from /home/linuxbrew/.linuxbrew/Cellar/gcc@12/12.3.0/include/c++/12/ccomplex:39, from /home/linuxbrew/.linuxbrew/Cellar/gcc@12/12.3.0/include/c++/12/x86_64-pc-linux-gnu/bits/stdc++.h:54, from main.cpp:1: In member function '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: /home/linuxbrew/.linuxbrew/Cellar/gcc@12/12.3.0/include/c++/12/ostream:202:25: warning: 'ans' may be used uninitialized [-Wmaybe-uninitialized] 202 | { return _M_insert(__n); } | ~~~~~~~~~^~~~~ main.cpp: In function 'int main()': main.cpp:71:8: note: 'ans' was declared here 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; }