https://codeforces.com/contest/1118/problem/B
删除一个 编号奇偶性发生变化
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<cmath>
#include<cctype>
using namespace std;
#define PI acos(-1.0)
#define mp make_pair
#define forn(i,n) for(int i=0;i<n;i++)
#define for1(i,n) for(int i=1;i<=n;i++)
#define rep(i,a,n) for(int i=a;i<n;i++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const int INF32M=0x3f3f3f3f;
const ll INF64M=0x3f3f3f3f3f3f3f3f;
const int maxn=2e5+5;
const int mod=1e9+7;
int a[maxn],preo[maxn],pree[maxn],sufo[maxn],sufe[maxn];
int main()//维护前后缀和 枚举O(n)删除a[i] 奇偶交叉 odd=前缀奇+后缀偶 even=前缀偶+后缀奇
{
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++) //分奇偶前缀和
{
preo[i]=preo[i-1];
pree[i]=pree[i-1]; //不加值a[i] 使延续上一个奇偶性不变的项
if(i&1)
preo[i]=preo[i]+a[i];//preo[1]=preo[0]+a[1]=a[1] preo[3]=preo[2]+a[3]=preo[1]+a[3]=a[1]+a[3]
else
pree[i]=pree[i]+a[i];//pree[2]=pree[1]+a[2]=pree[0]+a[2]=a[2]
}
for(int i=n;i>=1;i--) //分奇偶后缀和
{
sufo[i]=sufo[i+1];
sufe[i]=sufe[i+1];
if(i&1)
sufo[i]=sufo[i]+a[i];//i=7 sufo[7]=sufo[8]+a[7]=a[7] sufo[5]=sufo[6]+a[5]=sufo[7]+a[5]=a[7]+a[5]
else
sufe[i]+=a[i];//sufe[6]=sufe[7]+a[6]=sufe[8]+a[6]=a[6] sufe[4]=sufe[5]+a[4]=sufe[6]+a[4]=a[6]+a[4]
}
int odd=0,even=0,ans=0;
for(int i=1;i<=n;i++) //枚举删掉一个情况后
{
odd=preo[i]+sufe[i]-a[i]; //i前奇偶性不变 删掉i位置值后 后方前移 奇偶性改变
//现在的奇数项和 i前奇数项加原先后缀(倒序)偶数项 变成现在奇数项
even=pree[i]+sufo[i]-a[i]; //删除改删的
//现在的偶数项和 i前偶数项加原先后缀奇数项 变成现在偶数项
//i=1 odd=preo[1]+sufe[1]-a[1]=a[1]+sufe[2]-a[1]=sufe[2]=a[6]+a[4]+a[2]
//even=pree[1]+sufo[1]-a[1]=pree[0]+a[7]+a[5]+a[3]+(a[1]-a[1])
if(odd==even)
ans++;
}
cout<<ans<<endl;
return 0;
}