博客
关于我
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/

    你可能感兴趣的文章
    SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider using “allowedOriginPatterns“ in
    查看>>
    Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
    查看>>
    pandas DataFrame 中的自定义浮点格式
    查看>>
    Pandas 读取具有浮点值的 csv 文件会导致奇怪的舍入和小数位数
    查看>>
    pandas 适用,但仅适用于满足条件的行
    查看>>
    Pandas-通过对列和索引的值求和来合并两个数据框
    查看>>
    pandas.read_csv()的详解-ChatGPT4o作答
    查看>>
    Pandas数据可视化怎么做?用实战案例告诉你!
    查看>>
    Pandas数据结构之DataFrame常见操作
    查看>>
    pandas整合多份csv文件
    查看>>
    pandas某一列转数组list
    查看>>
    pandas的to_sql方法中使用if_exists=‘replace‘
    查看>>
    Parallel.ForEach的基础使用
    查看>>
    parallels desktop for mac安装虚拟机 之parallelsdesktop密钥 以及 parallels desktop安装win10的办公推荐可以提高办公效率...
    查看>>
    PATA1038题解(需复习)
    查看>>
    Path does not chain with any of the trust anchors
    查看>>
    Path形状获取字符串型变量数据
    查看>>
    PAT甲级——1006 Sign In and Sign Out (25分)
    查看>>
    PAT甲级——1007 Maximum Subsequence Sum (25分)
    查看>>
    PAT甲级——1009 Product of Polynomials (25分)(最后一个测试点段错误)
    查看>>