比赛 2025.1.18 评测结果 AAAAAAAAAA
题目名称 建设城市(民间数据) 最终得分 100
用户昵称 flyfree 运行时间 0.140 s
代码语言 C++ 内存使用 7.89 MiB
提交时间 2025-01-18 09:22:37
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 300010
#define mod 998244353
// By flyfreemrn
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
inline void write(ll x){
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
ll fpow(ll bas,ll ex){
	ll res=1;
	while(ex>0){
		if(ex&1)res=res*bas%mod;
		bas=bas*bas%mod;
		ex>>=1;
	}
	return res;
} 
ll fac[MAXN],invf[MAXN];
ll C(ll x,ll y){
	if(y>x)return 0;
	return fac[x]*invf[y]%mod*invf[x-y]%mod;
}
ll get(ll x,ll st,ll ed){
	ll L=ed-st;
	return C(L+x,x);
}
ll n,m,x,y,ans;
int main(){
	freopen("noi_online2020_city.in","r",stdin);
	freopen("noi_online2020_city.out","w",stdout);
	fac[0]=1;
	for(int i=1;i<=300000;i++)fac[i]=fac[i-1]*i%mod;
	invf[300000]=fpow(fac[300000],mod-2);
	for(int i=300000-1;i>=0;i--)invf[i]=invf[i+1]*(i+1)%mod;
	m=read(),n=read(),x=read(),y=read();
	for(int i=1;i<=m;i++){
		if(x<=n&&y<=n){
			ans=(ans+get(x-1,1,i)*get(n-y,i,m)%mod*get(n,1,m)%mod)%mod;
		}else if(x>n&&y>n){
			ans=(ans+get(x-n-1,i,m)*get(n*2-y,1,i)%mod*get(n,1,m)%mod)%mod;
		}else{
			ans=(ans+get(x-1,1,i)*get(n-x,i,m)%mod*get(y-n-1,i,m)%mod*get(2*n-y,1,i)%mod)%mod;
//			cout<<get(x-1,1,i)<<" "<<get(n-x,i,m)<<" "<<
		}
//		cout<<i<<" "<<ans<<endl;
	}
	cout<<ans;
	return 0;
}