附上一组数据
12
1 1 1 1 1 1 1 1 1 1 1 1
81
在这组数据上栽了两次,NYOJ一次,写博客一次都忘了考虑了。
#include <stdio.h>int a[10005];int main(){ int n; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++){ if(a[i]==1){ int left=1,right=1; if(i==0){ while(a[i+right]==0) right++; a[i+right]++; } else if(i==n-1){ while(a[i-left]==0) left++; a[i-left]++; } else{ while(a[i+right]==0&&i+right<n) right++; while(a[i-left]==0&&i-left>=0) left++; if(i+right==n||a[i-left]==2)//想想为啥等于2 的时候可以直接加 a[i-left]++; else if(i-left<0||a[i+right]==2) a[i+right]++; else a[i+right]<a[i-left]?a[i+right]++:a[i-left]++; } a[i]=0; } } int max=1; for(int i=0;i<n;i++){ if(a[i]==0) continue; max *= a[i]; max %= 10086; } printf("%d\n",max); } return 0;}