結果
| 問題 |
No.1963 Subset Mex
|
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-04-10 16:16:38 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 46 ms / 4,000 ms |
| コード長 | 1,867 bytes |
| コンパイル時間 | 2,345 ms |
| コンパイル使用メモリ | 163,672 KB |
| 実行使用メモリ | 7,844 KB |
| 最終ジャッジ日時 | 2025-04-10 16:16:43 |
| 合計ジャッジ時間 | 4,446 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 26 |
ソースコード
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
ll f[2][305][305],ans=1;//???j?,??k?????
const ll mod=998244353;
int n,cnt[305];
bool ck(int cur,int x,int y){
for(int i=cur-1;i;i--){
int nx=max(x,x*2-cnt[i]),ny=max(y,cnt[i]-x+y);
x=nx,y=ny;
}
return x<=y;
}
int lim[305];
bool ck(int x,int y){return y>=lim[x];}
int main(){
cin>>n;
// n=300;
for(int i=1;i<=n;i++){
int x;cin>>x;
// x=i;
cnt[max(x,1)]++;
if(x==0||x==1)ans=0;
}
f[1][0][0]=1;
for(int i=300;i;i--){
int now=(i&1),lst=now^1;
int pos=0;
for(int j=0;j<=300;j++){
while(pos<=300&&!ck(i,j,pos))pos++;
lim[j]=pos;
}
if(i==1){
for(int j=0;j<=300;j++){
for(int k=0;k<=300;k++){
if(!f[lst][j][k])continue;
f[lst][j][k]%=mod;
if(!f[lst][j][k])continue;
for(int x=0;x<=300;x++){
int jj=max(j,j*2+x-cnt[i]),kk=max(k,cnt[i]-j-x+k);
if(jj>n)break;
if(jj==0){
int nj=max(j,j*2+x+1-cnt[i]),nk=max(k,cnt[i]-j-x+k-1);
if((nj==0||!ck(nj,nk))&&ck(jj+1,kk)){
ans=(ans+f[lst][j][k]*(x+2));
}
}
f[now][jj][kk]=(f[now][jj][kk]+f[lst][j][k]*(x+1));
if(jj>0&&x>0&&ck(jj,kk)){
ans=(ans+f[lst][j][k]*(x+1));
}
}
f[lst][j][k]=0;
}
}
}
else{
for(int j=0;j<=300;j++){
for(int k=0;k<=300;k++){
if(!f[lst][j][k])continue;
f[lst][j][k]%=mod;
if(!f[lst][j][k])continue;
for(int x=0;x<=300;x++){
int jj=max(j,j*2+x-cnt[i]),kk=max(k,cnt[i]-j-x+k);
if(!ck(jj,kk))break;
if(jj==0){
int nj=max(j,j*2+x+1-cnt[i]),nk=max(k,cnt[i]-j-x+k-1);
if((nj==0||!ck(nj,nk))&&ck(jj+1,kk)){
ans=(ans+f[lst][j][k]);
}
}
f[now][jj][kk]=(f[now][jj][kk]+f[lst][j][k]);
if(jj>0&&x>0)ans=(ans+f[lst][j][k]);
}
f[lst][j][k]=0;
}
}
}
ans%=mod;
}
cout<<ans;
return 0;
}
vjudge1