結果
問題 | No.2409 Strange Werewolves |
ユーザー |
![]() |
提出日時 | 2023-08-11 22:05:10 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 22 ms / 2,000 ms |
コード長 | 2,453 bytes |
コンパイル時間 | 4,315 ms |
コンパイル使用メモリ | 253,800 KB |
最終ジャッジ日時 | 2025-02-16 01:26:21 |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 16 |
ソースコード
#include<bits/stdc++.h>#include<atcoder/all>using namespace std;using namespace atcoder;using ll = long long;using db = long double;using ch = char;using bl = bool;using st = string;using pll = pair<ll,ll>;using psl = pair<st,ll>;using vst = vector<st>;using vch = vector<ch>;using vvch = vector<vch>;using vbl = vector<bl>;using vvbl = vector<vbl>;using vdb = vector<db>;using vpll = vector<pll>;using vvpll = vector<vpll>;using vpsl = vector<psl>;using vi = vector<int>;using vvi = vector<vi>;using vvvi = vector<vvi>;using vvvvi = vector<vvvi>;using vll = vector<ll>;using vvll = vector<vll>;using vvvll = vector<vvll>;using vvvvll = vector<vvvll>;using vvvvvll = vector<vvvvll>;#define all(A) A.begin(),A.end()#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)#define rrep(i,a,b) for(ll i=(ll)(a);i<=(ll)(b);i++)#define drep(i,n) for(ll i=(ll)n-1; i>=0; i--)#define drrep(i,a,b) for(ll i=(ll)a; i>=(ll)b; i--)using mint = modint998244353;// using mint = modint1000000007;using vm = vector<mint>;using vvm = vector<vm>;using vvvm = vector<vvm>;const ll mod = 998244353;const ll INF = 3e18;template<class T> inline bool chmin(T& a, T b) {if (a > b) {a = b;return true;}return false;}template<class T> inline bool chmax(T& a, T b) {if (a < b) {a = b;return true;}return false;}ll gcd(ll a, ll b) {if (a==0)return b;if (b==0)return a;ll c=a;while(a%b!=0){c=a%b;a=b;b=c;}return b;}ll lcm(ll a,ll b){return a/gcd(a,b)*b;}ll Pow(ll a, ll n){ll res=1;while(n>0){if(n%2==1)res*=a;a*=a;n/=2;}return res;}ll Pow(ll a, ll n, ll p){ll res=1;while(n>0){a%=p;if(n%2==1)res*=a;a*=a;res%=p;n/=2;}return res;}void yn(bl ok){if(ok==true){cout << "Yes" << endl;}else{cout << "No" << endl;}return;}vector<mint> fact,factinv,inv;void combination(ll n){fact.resize(n+5);factinv.resize(n+5);inv.resize(n+5);fact[0]=fact[1]=1;factinv[0]=factinv[1]=1;inv[1]=1;rrep(i,2,n+4){fact[i]=fact[i-1]*i;inv[i]=mod-(inv[mod%i]*(mod/i));factinv[i]=factinv[i-1]*inv[i];}}mint nCr(ll n, ll r){mint res=fact[n];res*=factinv[r]*factinv[n-r];return res;}ll X,Y,Z,W;int main(){cin>>X>>Y>>Z>>W;combination(X+Y);mint ans=1;if(Z==0){ans*=X;ans*=nCr(Y,W)*fact[X+Y-Z-W-1];}else{ans*=Y;ans*=nCr(X,Z)*fact[X+Y-Z-W-1];}cout << ans.val() << endl;return 0;}