hdu 4544 湫湫系列故事——消灭兔子
原题: http://acm.hdu.edu.cn/showproblem.php?pid=4544
//hdu 4544
//思路:为每一只兔子找能够杀死自己并且花费Q币最少的箭,关键在于不要超时,详细过程:
// 每一只兔子按血量从大到小排序,每一把箭按攻击值从大到小排序。接下来for循环,为每一只兔子找箭,
// 遍历每一只兔子,查找攻击值大于兔子血量的箭,把这些箭的Q币压入优先队列
// 能够杀死上一只兔子的箭一定能杀死下一只兔子,因为兔子的血量是从大到小排列的,把箭都压进队列后,
// 每次取优先队列的头(即Q币最小)的箭即可,但如果队列为空,表示没有一把剑能杀死当前的兔子,则跳出循环,输出No,有则继续遍历,直到遍历完所有的兔子。
//优先队列可以,multiset也可以,使用队列要注意自己重写一个cmp,用greater<int>会报编译错误。
//数据可能达到100亿,用long long
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
int rab[100001];
struct J
{int di;int pi;
}j[100001];
int cmp1(int a,int b)//按血量从大到小排序
{return a>b;
}
int cmp2(J a,J b)//按伤害值由大到小排序
{return a.di>b.di;
}
struct cmp //队列要用到的cmp结构体
{bool operator ()(int a,int b){return a>b;}
};
int main()
{int n,m;while(~scanf("%d %d",&n,&m)){for(int i=0;i<n;i++){scanf("%d",&rab[i]);//兔子 }for(int i=0;i<m;i++)//箭 {scanf("%d",&j[i].di);}for(int i=0;i<m;i++){scanf("%d",&j[i].pi);}if(n>m){//兔子数目大于箭的数目,不能杀死全部兔子 printf("No\n");continue;} sort(rab,rab+n,cmp1); //排好序 sort(j,j+m,cmp2);priority_queue<int,vector<int>,cmp>q1;//存放q币优先队列,由小到大 int k=0; //箭的下标 ll money=0;int flag=1;//是否能够消灭全部兔子,flag=1能,flag=0不能 for(int i=0;i<n;i++)//遍历每一只兔子 {int di=rab[i];//当前兔子的血量 for(;k<m;k++){if(j[k].di>=di)//找那些可以杀死兔子的,把q币压入队列 {q1.push(j[k].pi);}else{break;}}if(q1.size()==0){//如果没有一支箭可以杀死这只兔子,flag=0,提前结束循环 flag=0;break;}else{money=money+q1.top();q1.pop();}} if(flag){ //可以杀死全部兔子 printf("%lld\n",money);}else{ //不能杀死全部兔子 printf("No\n");}} return 0;
} //AC
有一道类似的题可以巩固加深 :http://acm.hdu.edu.cn/showproblem.php?pid=4864
hdu 4544 湫湫系列故事——消灭兔子相关推荐
- HDU 4544 湫湫系列故事——消灭兔子 (贪心+优先队列)
题目链接:HDU 4544 题面: 湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K ...
- HDU4544 湫湫系列故事——消灭兔子
湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- 杭电OJ4544 湫湫系列故事——消灭兔子(优先队列过)
湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- HDU-4544-湫湫系列故事——消灭兔子--贪心+优先队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4544 Problem Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷 ...
- 湫湫系列故事——消灭兔子
湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对 ...
- 湫湫系列故事——消灭兔子(优先队列)
Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种 ...
- HDU4544 湫湫系列故事――消灭兔子
HDU 4544 Tags: 数据结构,贪心 Analysis: 将兔子的血量从大到小排序,将箭的杀伤力从大到小排序,对于每一个兔子血量, 将比他大的杀伤力大的剑压入优先队列,优先队列自己重写,让它每 ...
- HDU - 4544 湫湫系列故事——消灭兔子 贪心+优先队列
1.题意: 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买. 假设每种箭只能使 ...
- HDU 4539郑厂长系列故事――排兵布阵(状压DP)
HDU 4539 郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 1 //#pragma ...
最新文章
- 两只小熊队高级软件工程第七次作业敏捷冲刺7
- confluencejira集成_集成confluence与jira
- my02_Atlas mysql5.7安装配置
- ML之RS:基于用户的CF+LFM实现的推荐系统(基于相关度较高的用户实现电影推荐)
- Python (五) 高级特性
- linux开发板推荐_【新品发布】WiFi开发板XW-01-Kit,超低功耗,冷启快联,智能门锁首选!...
- java9 堆外内存_java堆外内存泄漏排查
- python3 多继承搜索__init__方法的两种策略
- PLSQL中文显示乱码(问号)
- 二分法c语言代码(递归、迭代)
- 错误记录(一)Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister报错解决办法
- Java设计模式透析之 —— 组合(Composite)
- 国家缩写大全 mysql_所有国家英文缩写
- 如何在淘宝上利用信息差赚钱
- 美团前端面试题(附答案)
- Youtube更改视频原始语言
- 常用URLscheme整理+不同场景下打开URLscheme的方法
- 每日新闻丨​iPhone11成败关系全球众多供应商下一张饭票
- Excel行高列宽使用单位为磅(1cm=28.6磅)
- AT2565 Chocolate Bar 洛谷