比赛 2025.1.18 评测结果 AAAAAAAAAA
题目名称 建设城市(民间数据) 最终得分 100
用户昵称 djyqjy 运行时间 0.172 s
代码语言 C++ 内存使用 4.42 MiB
提交时间 2025-01-18 10:51:39
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
	int f=1,num=0;
	char c=getchar();
	while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
	return num*f;
}
const int N=100010,MOD=998244353;
int fac[2*N],ny[2*N];
int m,n,x,y;
int ans;
int mul;
int qpow(int a,int b=MOD-2)
{
	mul=1;
	while(b)
	{
		if(b&1) mul=mul*a%MOD;
		b>>=1;
		a=a*a%MOD;
	}
	return mul;
}
int f(int a,int b){return fac[a+b-1]*ny[b-1]%MOD*ny[a]%MOD;}
signed main()
{
	freopen("noi_online2020_city.in","r",stdin);
	freopen("noi_online2020_city.out","w",stdout);
	m=read();n=read();x=read();y=read();if(x>y) swap(x,y);
	fac[0]=fac[1]=ny[0]=ny[1]=1;for(int i=2;i<n+m;i++) fac[i]=fac[i-1]*i%MOD,ny[i]=qpow(fac[i]);
	if(x<=n&&y<=n)
	{
		for(int i=1;i<=m;i++)
			ans=(ans+f(x-1,i)*f(n-y,m-i+1)%MOD)%MOD;
		ans=ans*f(n,m)%MOD;
	}
	else if(x>n&&y>n)
	{
		for(int i=1;i<=m;i++)
		    ans=(ans+f(x-n-1,m-i+1)*f(2*n-y,i)%MOD)%MOD;
		ans=ans*f(n,m)%MOD;
	}
	else
	{
		for(int i=1;i<=m;i++)
		    ans=(ans+f(x-1,i)*f(n-x,m-i+1)%MOD*f(y-n-1,m-i+1)%MOD*f(2*n-y,i)%MOD)%MOD;
	}
	printf("%lld",ans);
	return 0;
}