版权声明:欢迎转载,若转载,请标明出处,如有错误,请指点,也欢迎大佬们给出优化方法 https://blog.csdn.net/Charles_Zaqdt/article/details/87774079
题目链接:https://codeforces.com/contest/1118/problem/B
题意是给了n个数,问依次删去一个数后,剩下的数的奇数位置上的和 和 偶数位置上的和相等的有多少个。
思路是对于删除第i位数的话,第i位之前的奇偶性是不变的,第i位之后的奇偶性是和原来相反的,所以我们用前缀和,分别求出奇数位置上的前缀和和偶数位置上的前缀和,然后对于第i位删除掉了以后就是判断一下前i-1位的奇数前缀和加上后面偶数位的前缀和是否等于前i-1位的偶数前缀和加上后面奇数位置的前缀和。
AC代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
int pre[200005], a[200005], b[200005];
int main()
{
cin>>n;
int ans = 0;
for(int i=1;i<=n;i++){
cin>>pre[i];
if(i % 2 == 1){
a[i] = a[i-1] + pre[i];
b[i] = b[i-1];
}
if(i % 2 == 0){
b[i] = b[i-1] + pre[i];
a[i] = a[i-1];
}
}
for(int i=1;i<=n;i++){
int xx = 0, yy = 0;
xx = a[i-1] + (b[n] - b[i]);
yy = b[i-1] + (a[n] - a[i]);
if(xx == yy) ans ++;
}
cout<<ans<<endl;
return 0;
}