博客
关于我
C. Fruits 对map的映射排序
阅读量:164 次
发布时间:2019-02-28

本文共 2062 字,大约阅读时间需要 6 分钟。

为了求解购买所有水果的最大开销和最小开销,我们可以按照以下步骤进行:

  • 统计水果出现次数:使用哈希表记录每个水果名称的出现次数。
  • 排序价格:将所有价格从小到大排序,以便后续处理。
  • 排序水果列表:根据水果出现次数从多到少排序,出现次数多的水果标价较低,出现次数少的标价较高。
  • 计算最小开销:将排序后的价格从小到大依次乘以对应的水果数量,累加得到最小开销。
  • 计算最大开销:将排序后的价格从大到小依次乘以对应的水果数量,累加得到最大开销。
  • 以下是优化后的详细步骤说明:

    1. 统计水果出现次数

    • 使用哈希表(例如C++中的map)记录每个水果名称及其出现次数。
    • 遍历所有水果名称,更新哈希表中的计数。

    2. 排序价格

    • 将所有价格从小到大排序,准备后续分配。

    3. 排序水果列表

    • 根据水果出现次数从多到少排序,出现次数多的水果排在前面。
    • 这样,出现次数多的水果会被分配到较小的价格,出现次数少的分配到较大的价格。

    4. 计算最小开销

    • 遍历排序后的价格,从小到大依次乘以对应水果数量,累加得到总开销。

    5. 计算最大开销

    • 遍历排序后的价格,从大到小依次乘以对应水果数量,累加得到总开销。

    代码示例

    #include 
    using namespace std;int main() { int n, m; map
    mp; vector
    price; vector
    num; cin >> n >> m; // 读取水果名称和价格 for (int i = 0; i < n; ++i) { string temp; cin >> temp; if (mp.find(temp) != mp.end()) { mp[temp]++; } else { mp[temp] = 1; } } // 读取价格 for (int i = 0; i < m; ++i) { int p; cin >> p; price.push_back(p); } // 将价格从小到大排序 sort(price.begin(), price.end()); // 根据出现次数排序水果列表 vector
    > fruits; for (auto& pair : mp) { fruits.push_back(pair); } // 自定义排序,根据出现次数降序 sort(fruits.begin(), fruits.end(), [](const pair
    & a, const pair
    & b) { return a.second > b.second; }); // 分配价格 int min_cost = 0, max_cost = 0; vector
    k(n); for (int i = 0; i < n; ++i) { k[i] = i+1; // 索引从1开始 } // 计算最小开销 sort(k.begin(), k.end(), [](int a, int b) { return a > b; }); for (int i = 0; i < n; ++i++) { min_cost += price[i] * fruits[i].second * k[i]; } // 计算最大开销 sort(k.begin(), k.end(), [](int a, int b) { return a < b; }); for (int i = 0; i < n; ++i++) { max_cost += price[i] * fruits[i].second * k[i]; } cout << "最小开销:" << min_cost << endl; cout << "最大开销:" << max_cost << endl; return 0;}

    代码解释

    • 读取输入:首先读取水果数量和价格数量,然后读取每个水果名称和对应的价格。
    • 统计水果出现次数:使用哈希表记录每个水果名称的出现次数。
    • 排序价格:将价格从小到大排序,以便后续处理。
    • 排序水果列表:根据水果出现次数从多到少排序,确保出现次数多的水果排在前面。
    • 计算最小开销:将排序后的价格从小到大分配,计算最小开销。
    • 计算最大开销:将排序后的价格从大到小分配,计算最大开销。

    通过这种方法,我们可以有效地计算出购买所有水果的最大和最小开销。

    转载地址:http://ieoc.baihongyu.com/

    你可能感兴趣的文章
    OpenCV环境搭建(一)
    查看>>
    OpenCV的视频读取
    查看>>
    openCV目标识别 目标跟踪 YOLO5深度学习 Python 计算机视觉 计算机毕业设计 源码下载
    查看>>
    opencv笔记(1):图像缩放
    查看>>
    opencv笔记(二十四)——得到轮廓之后找到凸包convex hull
    查看>>
    OpenCV计算点到直线的距离 数学法
    查看>>
    Opencv识别图中人脸
    查看>>
    OpenCV读写avi、mpeg文件
    查看>>
    opencv里用calcCovarMatrix计算协方差矩阵
    查看>>
    OpenCV错误:在setSize中断言失败(s&>;=0)-尝试将图像放置在网络摄像头提要上时
    查看>>
    opencv面向对象设计初探
    查看>>
    OpenCV(1)读写图像
    查看>>
    OpenCV:不规则形状区域中每种颜色的像素数?
    查看>>
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>
    OpenDaylight融合OpenStack架构分析
    查看>>
    OpenERP ORM 对象方法列表
    查看>>
    openEuler Summit 2022 成功举行,开启全场景创新新时代
    查看>>
    openEuler 正式开放:推动计算多样化时代的到来
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_openeuler切换root用户_su:拒绝权限_passwd: 鉴定令牌操作错误---国产瀚高数据库工作笔记001
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_踩坑_安装以后系统无法联网_启动ens33网卡---国产瀚高数据库工作笔记002
    查看>>