結果
| 問題 |
No.1533 Don't be Negative!
|
| コンテスト | |
| ユーザー |
googol_S0
|
| 提出日時 | 2021-05-21 23:51:57 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 944 bytes |
| コンパイル時間 | 3,914 ms |
| コンパイル使用メモリ | 253,884 KB |
| 最終ジャッジ日時 | 2025-01-21 16:50:39 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 4 |
| other | WA * 53 |
ソースコード
#include<bits/stdc++.h>
#include<atcoder/all>
using namespace std;
using namespace atcoder;
using mint=modint998244353;
vector<mint> g1(2,1);
vector<mint> g2(2,1);
vector<mint> inv(2,1);
const int mod=998244353;
mint cmb(int a,int b){
if((b<0)&&(b>a)){
return 0;
}
return g1[a]*g2[b]*g2[a-b];
}
int main(){
inv[0]=0;
int n,m;
cin>>n>>m;
mint N,M;
N=mint::raw(n);
M=mint::raw(m);
mint ANS=0;
for(int i=2;i<n*(m+1)+6;i++){
g1.push_back(g1[i-1]*i);
inv.push_back(-inv[mod%i]*(mod/i));
g2.push_back((g2[i-1]*inv[i]));
}
mint V=(2*M+1).pow(n),W=(2*M+1).pow(mod-2),U=1;
mint A,Y;
int X,Z;
for(int K=1;K<=n;K++){
V*=W;
U*=(2*M+1);
A=0;
X=0;
Y=1;
Z=0;
while(X<=K){
if(Z>m*K){
break;
}
A+=cmb(m*K-Z+K-1,m*K-Z)*Y*cmb(K,X);
X++;
Z+=2*m+1;
Y=-Y;
}
ANS+=(U-A)*V*(N-K+1);
}
cout<<(ANS*(mint::raw(2).pow(mod-2))).val()<<endl;
}
googol_S0