记录编号 603439 评测结果 AAAAAAAAAAAAAAAAAAAAA
题目名称 3858.[USACO23 Jan Gold] Moo Route 最终得分 100
用户昵称 Gravatar淮淮清子 是否通过 通过
代码语言 C++ 运行时间 3.504 s
提交时间 2025-07-12 14:33:16 内存使用 19.39 MiB
显示代码纯文本
#include<iostream>
using namespace std;

#define ll long long

const ll MAXN = 1e6 + 5;
const ll MOD = 1e9 + 7;
ll col[MAXN];
ll incol[MAXN];
ll n, a[MAXN];

ll qpow(ll a,ll b,ll m){
    ll ans = 1;
    a %= m;
    while(b){
        if(b & 1) ans = (ans * a) % m;
        b >>= 1;
        a = (a * a) % m;
    }
    return ans;
}

ll inv(ll x){
	return qpow(x, MOD - 2, MOD);
}

ll C(ll a, ll b){
	if(a < b || b < 0) return 0;
    return (col[a] * incol[b] % MOD) * incol[a - b] % MOD;
}

int main(){
	freopen("moorouteg.in","r",stdin);
	freopen("moorouteg.out","w",stdout);
	cin.tie(0) -> ios::sync_with_stdio(0);
	cin >> n;
	for(int i = 1;i <= n;i ++){
		cin >> a[i];
		a[i] /= 2;
	}
	col[0] = incol[0] = 1;
	for(int i = 1;i < MAXN;i ++){
		col[i] = col[i - 1] * i % MOD;
		incol[i] = inv(col[i]);
	}
	ll ans = 1;
	for(int i = 1;i < n;i ++){
		if(a[i] > a[i + 1]) ans = ans * C(a[i], a[i + 1]) % MOD;
		else ans = ans * C(a[i + 1] - 1, a[i] - 1) % MOD;
	}
	cout << ans << '\n';
	return 0;
}