Codeforces Round #540 (Div. 3) B. Tanya and Candies 前缀和

题解

题目大意,给你一个序列,删去一个数值之后,要求剩下序列奇数和偶数的和相同,问有多少种删法。

对序列做前缀和,奇加偶减,遍历每个位置,检测除去当前位置前半部分前缀和和后半部分前缀和是否相等(后半部分删去后奇偶互换)

AC代码

#include <stdio.h>
#include <bits/stdc++.h>
#define fst first
#define sed second
using namespace std;
typedef long long ll;

const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
const int MAXN = 2e5 + 10;
int s[MAXN];

int main()
{
#ifdef LOCAL
	//freopen("C:/input.txt", "r", stdin);
#endif
	int n, a;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &a);
		s[i] = s[i - 1] + (i & 1 ? a : -a);
	}
	int ans = 0;
	for (int i = 1; i <= n; i++)
		if (s[i - 1] == s[n] - s[i])
			ans++;
	cout << ans << endl;

	return 0;
}

猜你喜欢

转载自blog.csdn.net/CaprYang/article/details/87870226