洛谷P10387 [蓝桥杯 2024 省 A] 训练士兵 一段很巧妙的处理方法(used)、

struct Node
{
ll cost; // 单词训练的花费
ll sum; // 训练次数
};

bool cmp(const Node &a, const Node &b)
{
return a.sum < b.sum; // 按训练次数排序
}

int main()
{
int n;
ll S, tot = 0, used = 0, cnt = 0; // tot: 总花费, cnt: 最小花费
cin >> n >> S;

vector a(n);
for (int i = 0; i < n; i++)
{
cin >> a[i].cost >> a[i].sum;
tot += a[i].cost;
}

sort(a.begin(), a.end(), cmp);

for (int i = 0; i < n; i++)
{
if (tot >= S) // 花费比组团的大,报团
{
cnt += (a[i].sum - used) * S;
tot -= a[i].cost;
used += a[i].sum - used;
}
else // 否则就单独训练
{
cnt += (a[i].sum - used) * a[i].cost;
tot -= a[i].cost;
}
}

cout << cnt << endl;
return 0;
}

posted on 2025-03-01 16:23  下头小美  阅读(131)  评论(0)    收藏  举报