20分求助
查看原帖
20分求助
770618
U_star楼主2022/12/4 13:25
#include<bits/stdc++.h> 
using namespace std;
long long v,v1,v2,m=998244353,f[2][10005];
long long qpow(long long a,long long b)
{
    long long ans=1;
    for(;b;b>>=1,a=a*a%m)
        if(b&1) 
            ans=ans*a%m;
    return ans;
}
long long C(long long a,long long b)
{
	long long s=1;
	for(long long i=a-b+1;i<=a;i++)
	{
		s*=i;
		s%=m;
	}
	for(long long i=1;i<=b;i++)
	{
		s*=qpow(i,m-2);
		s%=m;
	}	
	return s;
}
int main()
{
	long long n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>v;
		if(v==1)
		v1++;
		else
		v2++;
	}
	if(v1<=v2)
	cout<<C(v2+1,v1); 
	else
	{
		f[0][0]=1;
		for(long long i=1;i<=n;i++)
		{
			for(long long j=0;j<=v1-v2;j++)
			{
				f[i%2][j]=f[1-i%2][j+1]%m;
				if(j)
				f[i%2][j]+=f[1-i%2][j-1];
			}
		}
		cout<<f[n%2][v1-v2];
	}
	return 0;
}
2022/12/4 13:25
加载中...