比赛 |
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;
}