洛谷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;

}

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