题目简述
农场一年一度的选农场主开始啦!
选举的人有 Farmer John 和 Farmer Jack,全农场有 $N$ 个片区,第 $i$ 个片区有 $a_i$ 只 Jack 的奶牛,$b_i$ 只 John 的奶牛,没有其他人的奶牛。
John 要在各个片区发放牧草。
如果 John 在一个区发放牧草,那么所有 John 和 Jack 的奶牛都会投票支持 John,另一方面,如果 John 不在该区发放牧草,所有 Jack 的奶牛投票支持 Jack ,而 John 的奶牛不参与投票。
求John 想赢得比 Jack 多的选票,至少要去发放牧草的片区数量 $X$ 。
解题思路
假设 John 全不发放牧草,则 Jack 的票数就是 $b_i$ 的总和,John 则获得0票。
John 在第 $i$ 个区发放牧草能够使票数的差距减少 $a_i + b_i \times 2$ 票。
直接按这个排序再模拟票数就可以了。
很好我们又水过了一道D题
代码
#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
struct node
{
int a, b;
} v[200010];
int n, num, sum;
bool cmp(node x, node y)
{
return x.a + x.b * 2 > y.a + y.b * 2;
}
signed main()
{
// freopen("choose.in", "r", stdin);
// freopen("choose.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; i ++ )
{
cin >> v[i].b >> v[i].a;
num += v[i].b;
}
sort(v + 1, v + n + 1, cmp);
int i = 1;
while (sum <= num)
{
sum += v[i].a + v[i].b;
num -= v[i].b;
i ++ ;
}
cout << i - 1;
return 0;
}