题解:P11960 [GESP202503 五级] 平均分配
思路
从题目描述中可以看出这是一道贪心的题目。
贪心思想:既然想要收入最大,就要选取单个物品中出价尽量高,且与出价较低者的出价差距尽可能大。
解题方法
计算出第
AC code
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2 * 1e5 + 10;
int n, ans, C, B;
struct stu
{
int c, b, res;
}a[N];
bool cmp (stu x, stu y)
{
return x.res > y.res;
}
signed main ()
{
cin >> n;
for (int i = 1; i <= n * 2; i ++) scanf ("%lld", &a[i].b);
for (int i = 1; i <= n * 2; i ++) scanf ("%lld", &a[i].c);
for (int i = 1; i <= n * 2; i ++)
a[i].res = abs (a[i].c - a[i].b); // 记录差
sort (a + 1, a + n * 2 + 1, cmp); // 降序排序
for (int i = 1; i <= n * 2; i ++)
{
if (a[i].b > a[i].c) // 小B更优
{
if (B < n)
{
B ++;
ans += a[i].b;
}
else
{
C ++;
ans += a[i].c;
}
}
else if (a[i].c > a[i].b) // 小C更优
{
if (C < n)
{
C ++;
ans += a[i].c;
}
else
{
B ++;
ans += a[i].b;
}
}
else // 出价相同
{
if (C < n)
{
C ++;
ans += a[i].c;
}
else
{
B ++;
ans += a[i].b;
}
}
}
printf ("%lld", ans);
return 0;
}