P1208 [USACO1.3] 混合牛奶 Mixing Milk--C++代码

看题目戳这里

这个代码首先读取输入的牛奶数量n和农民的数量m。然后,使用一个结构体数组farmers来存储每个农民的价格和产量。接下来,将农民按价格从低到高排序。

然后,使用循环来逐个农民地购买牛奶,直到总牛奶数量达到n为止。如果当前农民的产量大于剩余需要购买的牛奶数量,则购买剩余需要的牛奶数量,否则购买当前农民的全部产量。购买牛奶时,累加总花费和总牛奶数量。最后,输出总花费。

此代码的时间复杂度为O(mlogm),其中m是农民的数量。排序操作的时间复杂度为O(mlogm),购买牛奶的循环的时间复杂度为O(m)。因此,总的时间复杂度为O(mlogm)。

以下是一个用C++编写的解决"混合牛奶"问题的代码示例:

#include <iostream>
#include <vector>
#include <algorithm>

struct Farmer {
    int price;
    int quantity;
};

bool comparePrice(const Farmer &a, const Farmer &b) {
    return a.price < b.price;
}

int main() {
    int n, m;
    std::cin >> n >> m;

    std::vector<Farmer> farmers(m);
    for (int i = 0; i < m; ++i) {
        std::cin >> farmers[i].price >> farmers[i].quantity;
    }

    std::sort(farmers.begin(), farmers.end(), comparePrice);

    int totalCost = 0;
    int totalQuantity = 0;
    int i = 0;
    while (totalQuantity < n) {
        if (farmers[i].quantity > n - totalQuantity) {
            totalCost += (n - totalQuantity) * farmers[i].price;
            totalQuantity = n;
        } else {
            totalCost += farmers[i].quantity * farmers[i].price;
            totalQuantity += farmers[i].quantity;
            ++i;
        }
    }

    std::cout << totalCost << std::endl;

    return 0;
}

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值