计蒜客 踩蚂蚁(优先队列)
来源:互联网 发布:win10网络时间同步 编辑:程序博客网 时间:2024/06/16 11:23
题目链接:https://www.jisuanke.com/course/615/28104
题目思路:
_这道题需要用到前面介绍过的贪心策略,因此在这里直接给出算法的过程,你只需要借助priority_queue
来实现它。_首先将蚂蚁按照血量从大到小排序,并把鞋子(可以使用结构体或pair
来保存鞋子的伤害值和费用)按照伤害值从高到低排序。逐个计算每只蚂蚁需要用哪双鞋子来踩,对于当前蚂蚁的血量
ant,把所有伤害值不小于 ant 的鞋子放入优先队列中。在这个优先队列中,费用低的鞋子优先级越高。在每次将鞋子放入优先队列后,让优先队列的队首元素(费用最低的鞋子)出队并累积总费用。不断循环,直到算出每只蚂蚁对应的鞋子,或者发现没有可用的鞋子时直接输出No
。
代码:
#include <bits/stdc++.h>using namespace std;struct node{ int d;// int c;//价格 bool operator<(const node &a)const{ return c>a.c;//重载,从小到大 }};struct xiezi{ int d; int c;}m[100100];bool cmp1(int a,int b){ return a>b;}bool cmp2(xiezi a,xiezi b){ return a.d>b.d;}int a[100100];int main(){ int N,M; priority_queue<node>Q; scanf("%d%d",&N,&M); for(int i=0;i<N;i++) scanf("%d",&a[i]); for(int i=0;i<M;i++) scanf("%d",&m[i].d); for(int i=0;i<M;i++) scanf("%d",&m[i].c); sort(a,a+N,cmp1); sort(m,m+M,cmp2); int flag=0; int j=0; int ans=0; for(int i=0;i<N;i++){ while(m[j].d>=a[i]){ node tmp; tmp.c=m[j].c,tmp.d=m[j].d; j++; Q.push(tmp); } if(Q.size()==0) flag=1; else{ ans+=Q.top().c; Q.pop(); } } if(flag) printf("No\n"); else printf("%d\n",ans);}
阅读全文
1 0
- 计蒜客 踩蚂蚁(优先队列)
- 计蒜客 计蒜机(优先队列+思路,没想到)
- 左式堆(优先队列)
- 优先队列(堆)
- hdu4006(优先队列)
- 优先队列(priority_queue)
- 优先队列(堆)
- hdu3873 (优先队列)
- priority_queue(优先队列)
- 优先队列(堆)
- UVA1203Argus(优先队列)
- 优先队列(二)
- Stones(优先队列)
- priority_queue(优先队列)
- 优先队列(堆)
- 优先队列(堆)
- 优先队列 (2)
- 优先队列(priority_queue)
- hdu6066RXD's date(水)
- Scala集合基本操作(1)
- Codeforces 651E Table Compression 拓扑序
- Java设计模式--工厂方法模式
- 数组中Arrays工具类方法的应用
- 计蒜客 踩蚂蚁(优先队列)
- 7、集合
- 1101. Quick Sort (25)快排
- A
- 机器学习第三周(三)--正则化
- 大数据 (九)Hadoop-使用eclipe插件操作HDFS
- UVA12338Anti-Rhyme Pairs(哈希+二分最长前缀)
- hdu6063RXD and math(快速幂找规律)
- python random和numpy random