結果
問題 |
No.2083 OR Subset
|
ユーザー |
![]() |
提出日時 | 2025-10-10 22:33:26 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,343 ms / 3,000 ms |
コード長 | 957 bytes |
コンパイル時間 | 1,389 ms |
コンパイル使用メモリ | 162,464 KB |
実行使用メモリ | 202,920 KB |
最終ジャッジ日時 | 2025-10-10 22:33:43 |
合計ジャッジ時間 | 15,476 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 17 |
ソースコード
#include<bits/stdc++.h> #define int long long using namespace std; const int N=5050; const int mod=998244353; int S[N][N],n,ans,inv[N],fac[N]; int Pow(int a,int b=mod-2){ int s=1; while(b){ if(b&1)s=s*a%mod; a=a*a%mod;b>>=1; }return s; } int C(int n,int m){ if(n<m)return 0; return fac[n]*inv[m]%mod*inv[n-m]%mod; } signed main(){ ios::sync_with_stdio(false);cin.tie(0),cout.tie(0); fac[0]=1; for(int i=1;i<N;++i)fac[i]=fac[i-1]*i%mod; inv[N-1]=Pow(fac[N-1]); for(int i=N-2;i>=0;--i)inv[i]=inv[i+1]*(i+1)%mod; S[0][0]=1; for(int i=1;i<N;++i){ for(int j=1;j<N;++j){ S[i][j]=(S[i-1][j-1]+j*S[i-1][j]%mod)%mod; } } cin>>n; for(int i=0;i<=n;++i){ for(int j=0;j<=i;++j){ int val=(Pow(2,j)+mod-j)%mod; val=Pow(val,n-i); ans=(ans+C(n,i)*S[i][j]%mod*val%mod)%mod; } } cout<<ans; return 0; } //