暴力枚举每个点。前提是我们必须处理奇数位置的前缀和和偶数位置的前缀和。然后在反着求一边前缀和。因为这样为了更好的计算。
假入删去i这个点,那么i-1之前的奇数位置的前缀和是不变的,后面的奇偶会发生改变。我们要根据i是奇数还是偶数,来判断i+1的性质,写出他们的前缀和。所以这是一个关键的地方。还是看代码,正着和反着求前缀和只是为了更好的计算。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int dl[N],dr[N],el[N],er[N],a[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
if(i&1) dl[i]=dl[i-1]+a[i],el[i]=el[i-1];
else dl[i]=dl[i-1],el[i]=el[i-1]+a[i];
}
for(int i=n;i>=1;i--)
{
if(i&1) dr[i]=dr[i+1]+a[i],er[i]=er[i+1];
else dr[i]=dr[i+1],er[i]=er[i+1]+a[i];
}
int sum=0;
for(int i=1;i<=n;i++)
{
int l,r;
l=dl[i-1]+er[i+1];
r=el[i-1]+dr[i+1];
if(l==r) sum++;
}
cout<<sum<<endl;
}