#include<bits/stdc++.h>
using namespace std;
#define N 2000010
#define int long long
#define mo 1000000007
int jc[N],ij[N],n,a[N];
int c(int y,int x){
if(y<x)
return 1;
return jc[y]*ij[x]%mo*ij[y-x]%mo;
}
int qp(int x,int y){
int r=1;
while(y){
if(y&1)
r=r*x%mo;
x=x*x%mo;
y>>=1;
}
return r;
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
jc[0]=1;
for(int i=1;i<N;i++)
jc[i]=jc[i-1]*i%mo;
ij[N-1]=qp(jc[N-1],mo-2);
for(int i=N-1;i;i--)
ij[i-1]=ij[i]*i%mo;
int ans=1;
for(int i=1;i<n;i++){
if(a[i+1]>a[i]){
int va=(a[i+1]-a[i])/2;
ans=ans*c(a[i]/2+va-1,va)%mo;
}
else{
int va=(a[i]-a[i+1])/2;
ans=ans*c(a[i]/2,va)%mo;
}
}
printf("%lld\n",ans);
}
标签:va,int,题解,mo,lg9018,ans,define
From: https://www.cnblogs.com/celerity/p/17120379.html