<题目链接>

题目大意:

就是一道纯模拟题,具体模拟过程见代码。

解题分析:
要掌握不同优先级的优先队列的设置。下面是对优先队列的使用操作详解:

priority_queue<int>q 默认为大顶堆。

priority_queue<int, vector<int>, less<int>> 大顶堆:表示其他都比堆顶小
priority_queue<int, vector<int>, greater<int>> 小顶堆:表示其他都比堆顶大

结构体设置优先级:

只可在结构体内部重载小于号。

两种重置用法:

  • 运算符重载 + 友元
struct fruit
{
string name;
double price;
friend bool operator< (fruit f1, fruit f2)
{
return f1.price < f2.price; // 相当于less,这是大顶堆,反之则是小顶堆
}
} f1, f2, f3; //定义三个结构体变量 这样直接可以:
`priority_queue<fruit > q;
  • 比较运算符外置
struct fruit
{
string name;
double price;
} f1, f2, f3; //定义三个结构体变量 struct cmp
{
bool operator () (fruit f1, fruit f2) // 重载括号
{
return f1.price < f2.price; // 等同于less
}
};

调用语法是:

priority_queue<fruit,vector<fruit> , cmp > q;

这个和基本类型的用法就相似了,只不过是用cmp代替了less或者greater

 

下面是本题代码:

#include <cstdio>
#include <cstring>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std; #define ll long long int main(){
int n,m;
scanf("%d%d",&n,&m);
int arr[350];
for(int i=1;i<=n;i++){
scanf("%d",&arr[i]);
}
priority_queue<ll,vector<ll> ,greater<ll> >q; //将该优先队列设为小顶堆
for(int i=1;i<=m;i++){
q.push(arr[i]);
}
ll b[350];int cnt=0;
b[++cnt]=q.top();q.pop(); //挑取刚开始m个中的最小的
for(int i=m+1;i<=n;i++){
q.push(arr[i]); //将后面没有读过的依次加入
b[++cnt]=b[cnt-1]+q.top(); //按照题目要求算出每次的值
q.pop();
}
while(q.size()){ //将剩下的所有没读过的全部读完
b[++cnt]=b[cnt-1]+q.top();
q.pop();
}
ll sum=0;
for(int i=1;i<=cnt;i++){
sum+=b[i];
}
printf("%lld\n",sum);
return 0;
}

  

2018-09-15

最新文章

  1. Java上面出现这个错误如何解决关于XML的
  2. DWZ分页、排序失效小结
  3. CircleDisplay
  4. SHA-1
  5. Educational Codeforces Round 8 D. Magic Numbers
  6. centos6 install mplayer(multimedia)
  7. webshell 匿名用户(入侵者)
  8. 无向图的最短路径算法JAVA实现(转)
  9. PLSQL解析XML文件
  10. hadoop的节点间的通信
  11. for循环增强
  12. ubuntu上安装multi-mechanize步骤
  13. Java中的数组添加,数组相关代码
  14. wget命令使用报错 certificate common name &#39;xxx&#39; doesn&#39;t match requestde host name
  15. Excel下拉选项二级联动
  16. Oracle简单查询实例
  17. PHP计算连续签到天数以及累计签到天数
  18. cdnbest常见http状态码解释
  19. StringBuffer的append方法比“+”高效
  20. e800. 监听JSlider的数值变化

热门文章

  1. 不想用ssh框架
  2. Confluence 6 使用 Apache 和 mod_proxy 添加 SSL和其他
  3. Confluence 6 配置 Office 连接器选项
  4. LeetCode(77):组合
  5. vue-cli 里axios的使用
  6. 详解C程序编译、链接与存储空间布局
  7. Python(字符串操作实例1)一个字符串用空格隔开
  8. 微信支付JSAPI掉不起来支付按钮是什么原因?(原创)
  9. SNMP MIBs and IPv6
  10. CGAffineTransform的使用