AT_arc094_c题解
ZHANGyutao123 · · 题解
传送门
题目大意:
有两个长度为
- 若两个数组相等,则停止操作。
- 第一个人在
A 数组任选一个数,将其-1 。 - 第二个人在
B 数组任选一个数,将其-1 。
第一个人想尽可能的增加操作次数,第二个人想尽可能的减少操作次数。求在最优情况下的操作次数。
思路分析:
首先,对于两个人所选择的数,不管是哪个人先选择,最后一定会使得
然后,因为第一个人想最大化操作次数,所以我们需要选择最 "劣" 的情况,即尽量选择那些操作之后不能使得某个元素归零的情况。
考虑如果
而当
所以第一个人可以选择
因此枚举每个
代码实现:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 2e5 + 2;
int n, A[maxn], B[maxn];
ll ans = 0; // A 数组总和
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d%d", &A[i], &B[i]);
ans += A[i];
}
for (int i = 1; i <= n; ++i) {
if (B[i] < A[i]) {
// 如果 A[i] 不可能减为零,选择操作代价最小的数
// 即选择其他数之和最大的情况
ans = max(ans, ans - B[i]);
}
}
printf("%lld\n", ans);
return 0;
}