比赛 2025暑期集训第6场 评测结果 AAAAAAAAAAAAAAAAAAAAA
题目名称 Moo Route 最终得分 100
用户昵称 左清源 运行时间 0.971 s
代码语言 C++ 内存使用 11.68 MiB
提交时间 2025-07-12 12:33:19
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e5+10,V=2e6+10;
const int p=1e9+7;
typedef long long ll;
int n,a[N],u[N],v[N];
ll fac[V],ans=1;
void pre(){
	fac[0]=1;
	for(int i=1;i<=1e6+10;i++)fac[i]=(fac[i-1]*i)%p;
	return;
}
ll ksm(ll a,ll b){
	ll ans=1;
	while(b){
		if(b&1)ans=(ans*a)%p;
		a=(a*a)%p;
		b>>=1;
	}
	return ans;
}
ll C(ll n,ll m){
	return fac[n]*ksm(fac[n-m]*fac[m]%p,p-2)%p;
}
int main(){
	freopen("moorouteg.in","r",stdin);
	freopen("moorouteg.out","w",stdout);
	pre();
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",a+i),a[i]/=2;
	for(int i=1;i<n;i++){
		if(a[i+1]==a[i]||a[i]==1)continue;
		if(a[i+1]==1){
			ans=(ans%p*a[i]%p)%p;
			continue;
		}
		if(a[i+1]>=a[i]){
			ans=(ans%p*C(a[i+1]-1,a[i]-1)%p)%p;
		}else{
			ans=(ans%p*C(a[i],a[i+1])%p)%p;
		}
	}
	for(int i=1;i<=n;i++)ans=(ans*C(u[i],v[i]));
	printf("%lld\n",ans); 
	return 0;
}