标签:
第一部分:题目
3 1 2 3 3 5 1 2
9 15
第二部分:代码
/* 对于1来说: 1,两端的1加到相邻的数上,然后自己置为0。 2,如果1处在中间,那么加到相邻较小的数上;如果两个数相等,优先加到左边。 注意:如果左边是2的话,不管它是不是较小的加给它。因为3*m>2*(m-1)。当然如果m 小于2的话就不对了。那么m只能等于1。其实当m等于1时,比如2 1 1。结果都是4: (2+1)+1==2*(1+1)。 */ #include<stdio.h> int s[10005]; int n; void repai(int index)//每当遇到1,处理后把数组往前缩进。当然可以置0,加一个判断就好 { int i; for(i=index;i<n-1;i++) { s[i]=s[i+1]; } n--;//数组长度减一 } int main() { while(scanf("%d",&n)!=EOF) { int i; for(i=0;i<n;i++) { scanf("%d",&s[i]); } int max; if(n==1) { max=s[0]; } else { if(s[0]==1) { s[1]++; } if(s[n-1]==1) { s[n-2]++; } for(i=1;i<n-1;i++) { if(s[i]==1) { if(s[i-1]==2) { s[i-1]++; } else { if(s[i-1]<=s[i+1]) { s[i-1]++; } else { s[i+1]++; } } repai(i); i--; } } max=1; for(i=0;i<n;i++) { if(s[i]!=0) { max*=s[i]; max%=10086; } } } printf("%d\n",max); } return 0; }
标签:
原文地址:http://www.cnblogs.com/xiangguoguo/p/5440733.html