分析发现,所有的数都能分解成 2和3 的积。
而变数就是1.
那就是如何把1凑成最多的3.
开头和结尾的1特殊判断。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=10000+10;
const int mod=10086;
int main(){
int n;
int a[maxn];
while(~scanf("%d",&n)){
ll ans=1,t=0;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n+1;i++){
if(a[i]>=3) {
if(i<n){
if(a[i+1]>1){
ans=(ans%mod*a[i]%mod)%mod;
}else{
if(i<n-1){
if(a[i]<=a[i+2]){
a[i]+=1;
ans=(ans%mod*a[i]%mod)%mod;
i++;
}else{
ans=(ans%mod*a[i]%mod)%mod;
i++;a[i+1]+=1;
}//printf("%~~~%lld\n",ans);
}else{
a[i]+=1;
ans=(ans%mod*a[i]%mod)%mod;
i++;
}
}
}else{
ans=(ans%mod*a[i]%mod)%mod;
}
}else if(a[i]==2){
if(i<n){
if(a[i+1]==1){
a[i+1]=3;
}else{
ans=(ans%mod*2)%mod;
}
}else ans=(ans%mod*2)%mod;
}else{
if(i<n) a[i+1]+=1;
}
}
printf("%lld\n",ans);
}
return 0;
}