题目链接
小鲍提供的算法,我写的代码,体会不出贪心的算法,找不出代码WA的原因,在此附上自己的代码和网上的代码,待日后解决。。
我的代码
#include<stdio.h>
#include<math.h>
int main()
{
int n,ans;
int a[10010];
while(scanf("%d",&n)!=EOF)
{
ans=1;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
if(a[1]==1)
{
a[2]++;
}
for(int i=2;i<n;i++)
{
if(a[i]==1)
{
if(a[i-1]>a[i+1])
a[i+1]++;
else
a[i-1]++;
}
}
if(a[n]==1)
a[n-1]++;
for(int i=1;i<=n;i++)
{
//printf("%d ",a[i]);
ans*=a[i];
ans=ans%10086;
}
printf("%d\n",ans);
}
return 0;
}
网上的
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
int a[10005];
void add(int l,int r)
{
if(a[l]==2)
{
a[l]++;
return ;
}
if(a[l]==0)
l--;
a[l]<=a[r]?a[l]++:a[r]++;
}
int main()
{
int n;
while(cin>>n)
{
int i,j;
for(i=0; i<n; i++)
cin>>a[i];
if(a[0]==1)
{
a[1]++;
a[0]=0;
}
for(i=1; i<n-1; i++)
if(a[i]==1)
{
a[i]=0;
add(i-1,i+1);//左加or右加
}
if(a[n-1]==1&&n>1)
{
for(i=n-2; !a[i]; i--);//0
a[i]++;
a[n-1]=0;
}
int sum;
for(i=0,sum=1; i<n; i++)
if(a[i])
sum=(sum*a[i])%10086;
cout<<sum<<endl;
}
}