結果

問題 No.3371 Add Insert Operations
コンテスト
ユーザー メイト
提出日時 2026-02-02 14:03:36
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
結果
WA  
実行時間 -
コード長 1,663 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,095 ms
コンパイル使用メモリ 220,904 KB
実行使用メモリ 18,128 KB
最終ジャッジ日時 2026-02-02 14:03:41
合計ジャッジ時間 4,282 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 8 WA * 28
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<bits/stdc++.h>
using namespace std;
const int M=2e5+5,P=998244353;
int n,a[M],l[M],r[M],ord[M],to[M][2],fa[M],sz[M];
vector<int>ch[M];
long long F[M],iF[M];
void del(int x){l[r[x]]=l[x];r[l[x]]=r[x];}
long long C(int n,int k){return n>=k&&k>=0?F[n]*iF[k]%P*iF[n-k]%P:0;}
void dfs(int u){
	sz[u]=1;
	for(int v:ch[u])dfs(v),sz[u]+=sz[v];
}
int main(){
	scanf("%d",&n);
	F[0]=1;for(int i=1;i<=n;i++)F[i]=F[i-1]*i%P;
	iF[n]=1;for(long long x=F[n],e=P-2;e;e/=2,x=x*x%P)if(e&1)iF[n]=iF[n]*x%P;
	for(int i=n;i;i--)iF[i-1]=iF[i]*i%P;
	for(int i=1;i<=n;i++){
		scanf("%d",a+i);
		l[i]=i-1;r[i]=i+1;
		to[i][0]=to[i][1]=-1;
	}
	queue<int>q;
	for(int i=1;i<=n;i++)if(a[i]==0)q.push(i),del(i);
	int tot=0,ok=1;
	while(!q.empty()){
		int x=q.front();q.pop();
		ord[x]=++tot;
		if(l[x]>=1){
			if(a[l[x]]==0){ok=0;break;}
			to[x][0]=l[x];a[l[x]]--;
			if(a[l[x]]==0){if(tot<n-1)q.push(l[x]),del(l[x]);else{ok=0;break;}}
		}
		if(ok&&r[x]<=n){
			if(a[r[x]]==0){ok=0;break;}
			to[x][1]=r[x];a[r[x]]--;
			if(a[r[x]]==0){if(tot<n-1)q.push(r[x]),del(r[x]);else{ok=0;break;}}
		}
	}
	if(tot!=n-1||!ok){puts("0");return 0;}
	for(int i=1;i<=n;i++){
		if(to[i][0]<0&&to[i][1]<0)continue;
		fa[i]=to[i][0]<0?to[i][1]:to[i][1]<0?to[i][0]:(ord[to[i][0]]<ord[to[i][1]]?to[i][1]:to[i][0]);
	}
	int root=0;
	for(int i=1;i<=n;i++)if(!ord[i])root=i;
	if(!root){puts("0");return 0;}
	for(int i=1;i<=n;i++)if(fa[i])ch[fa[i]].push_back(i);
	dfs(root);
	long long ans=1;
	for(int i=1;i<=n;i++){
		if(to[i][0]<0||to[i][1]<0)continue;
		ans=ans*C(sz[to[i][0]]+sz[to[i][1]],sz[to[i][0]])%P;
	}
	printf("%d\n",(int)((ans%P+P)%P));
}
0