首页 > 编程语言 >吃巧克力,容器vector、map,容器适配器 priority_queue,算法sort排序

吃巧克力,容器vector、map,容器适配器 priority_queue,算法sort排序

时间:2023-03-27 22:35:38浏览次数:32  
标签:sort 容器 巧克力 include int 适配器 vchoc long 排序

 

#include <algorithm> 
#include <queue>
#include <map>
#include <vector>
#include <iostream>
using namespace std;

struct chocolate{
    long long a;  // 价格
    long long b;  // 保质期
    long long c;  // 数量
    int id;       // 种类
    bool operator<(const chocolate &choc){   //按保质期排序
        return b > choc.b;
    }
};

struct compare{
    bool operator()(const chocolate &choc1,const chocolate &choc2){   //priority_queue  按价格排序
        return choc1.a > choc2.a;
    }
};

int main()
{    
    //freopen("d:\\1.txt","r",stdin );
    int x, n;           //n 种巧克力,吃 x 天
    long long TP = 0;   //总价 total price
    
    vector<chocolate > vchoc;     //存储各种巧克力,按保质期,用sort排序      //空vector,
    priority_queue<chocolate, vector<chocolate>, compare  > q; //按价格排序 //空队列
    map<int, int > mp;  //键:巧克力种类id,值:为吃掉的该种巧克力的数量    //空map
    
    cin >> x >> n;
    for(int i=1; i<=n; ++i){ //n种巧克力,编号从 1 到 n
        chocolate t;
        t.id = i;               //编号
        cin>> t.a >> t.b >> t.c;//价格、保质期、数量      
        vchoc.push_back( t );
    }
                
    sort(vchoc.begin(),vchoc.end() );//按保质期排序

    for(int i=x,j=0; i>=1; i--)  //从第x天,到第一天
    {      
        while(vchoc[j].b>=i && j<vchoc.size() ){ //所有在该天(第i天),
            q.push(vchoc[j] );                     //在保质期内(vchoc[j].b>=i)的巧克力全部放入优先队列按价格排序,
            j++;                                 //可能会放入 >=0 且 <=n 种巧克力
        }
        
        if(!q.size()){
            cout << "-1" << endl;
            return 0;
        }
        
        chocolate t = q.top(); //取价格最小的巧克力
        mp[t.id]++;            //!!!以该种巧克力的编号为键,一天一个累加该种类的巧克力被吃掉的数量
        TP += t.a; //累加吃掉的巧克力的价格
        
        if(mp[t.id] == t.c ) {//!!!该种巧克力被吃完(被吃掉的数量 与 该种巧克力的数量相等)
             q.pop();    //从优先队列中剔除 
        }                    
    }
        
    cout << TP << endl;
        
    return 0; 
}


/* 10 3
1 6 5
2 7 3
3 10 10 */

 

标签:sort,容器,巧克力,include,int,适配器,vchoc,long,排序
From: https://www.cnblogs.com/GoldenEllipsis/p/17263297.html

相关文章

  • sort uniq常见用法
    (1)awk-F,'{a[$2]++}END{for(iina)printi""a[i]}' 文件名.txt(2)cat文件名.txt|cut-d,-f2|sort|uniq-c|sort-nhttps://blog.csdn.net/qq_37085158/a......
  • Redis 有序集合(sorted set)
    Redis有序集合(sortedset)Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通......
  • docker根据镜像,启动一个mysql容器命令
    dockerrun--namemysql-d-it-p3307:3306-eMYSQL_ROOT_PASSWORD=rootmysql上述命令中,--name后的mysql,是容器的名字;最后一个mysql,是已存的mysql镜像的名字-p330......
  • 手动把本地war包上传到容器中
    本地war上传到linuxscpROOT.warserverIP:/home/查看目标容器IDdockerps复制war到指定容器dockercpROOT.war容器ID:/usr/local/tomcat/webapps/进入指定容器查......
  • 一统天下 flutter - widget 容器类(只能有一个子): LimitedBox - 限制最大尺寸
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget容器类(只能有一个子):LimitedBox-限制最大尺寸示例如下:lib\w......
  • 一统天下 flutter - widget 容器类(只能有一个子): OverflowBox - 可溢出
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget容器类(只能有一个子):OverflowBox-可溢出示例如下:lib\widget......
  • C语言—模范qsort()实现一个冒泡排序的通用算法
    目录一、库方法qsort参数解释二、冒泡排序解释三、模拟实现1、冒泡排序函数2、数值交换函数3、测试函数4、运行结果5、源代码一、库方法qsort参数解释二、冒泡排序解释三、......
  • AcWing3696 -- topsort & 贪心
    1.题目描述给定我们一些有向边和无向边,判断在将所有无向边确定方向后,能否生成一个有向无环图2.思路思路其实真的非常简单。我根据题目给定的有向边做一次\(top......
  • DeepSORT及SORT的说明
    整体思路SORT算法的思路是将目标检测算法得到的检测框与预测的跟踪框的iou(交并比)输入到匈牙利算法中进行线性分配来关联帧间Id。而DeepSORT算法则是将目标的外观信......
  • python中sorted排序
     key是自定义函数reverse=False,升序(默认)reverse=True,倒序#不区分大小写排序sorted(['bob','aBout','ZOO','Credit'],key=str.lower)#按绝对值排序sorted([36,5,-12......