wa代码
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<vector>
#include<map>
using namespace std;
typedef long long lld;
const int oo=0x3f3f3f3f;
const lld OO=1LL<<61;
const int MOD=1000000007;
#define eps 1e-6
#define maxn 100005
lld l[maxn][2],r[maxn][2];///往左不回来,往左回来,往右不回来,往右回来。
int b[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=2;i<=n;i++)
scanf("%d",&b[i]);
memset(l,0,sizeof l);
memset(r,0,sizeof r);
for(int i=2;i<=n;i++)
{
if(b[i]%2==0)
l[i][0]++;
else break;
}
for(int i=n-1;i>=1;i--)
{
if(b[i+1]%2==0)
r[i][0]++;
else break;
}
for(int i=2;i<=n;i++)
{
if(b[i]%2==1)
l[i][0]+=l[i-1][0]+b[i];
else
l[i][0]+=l[i-1][0]+b[i]-1;
if(b[i]==1)
l[i][1]=0;
else if(b[i]%2==0)
l[i][1]+=l[i-1][1]+b[i];
else
l[i][1]+=l[i-1][1]+b[i]-1;
}
for(int i=n-1;i>=1;i--)
{
if(b[i+1]%2==1)
r[i][0]+=r[i+1][0]+b[i+1];
else
r[i][0]+=r[i+1][0]+b[i+1]-1;
if(b[i+1]==1)
r[i][1]=0;
else if(b[i+1]%2==0)
r[i][1]+=r[i+1][1]+b[i+1];
else
r[i][1]+=r[i+1][1]+b[i+1]-1;
}
lld ans=0;
for(int i=1;i<=n;i++)
{
ans=max(max(ans,l[i][1]+r[i][1]),max(l[i][1]+r[i][0],l[i][0]+r[i][1]));
}
printf("%I64d\n",ans);
}
return 0;
}
/**
10
2 2 1 1 1 1 2 2 1
10
1 1 2 2 2 1 1 2 2
//靠!
15
1 2 2 2 2 1 2 2 2 2 2 2 1 1
*/