洛谷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<Node> 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;
}
浙公网安备 33010602011771号