HDU 1896 【留个使用priority_queue容器的样例】
感谢《啊哈!算法》的讲解,水鸟弄懂了什么是优先队列。
题意是:在路上有很多石子,给出他们的初始位置和小明能够将他们扔出的距离,当小明遇到奇数个石子的时候就会把它扔出,遇到偶数个就会忽略他,一直走到路上没有石子为止,求解最后一个石子的位置。
一开始用排序做的,果断超时,看了题解才知道这是优先队列。
贴优先队列的代码:
#include<stdio.h>
int n;
struct st
{
int pos,dis;
};
st stone[];
void swap(int a,int b)
{
st t;
t=stone[a];
stone[a]=stone[b];
stone[b]=t;
}
void siftdown(int i)
{
int t,flag=;
while((i<<)<=n&&flag==)
{
if(stone[i].pos>stone[i<<].pos||(stone[i].pos==stone[i<<].pos&&stone[i].dis>stone[i<<].dis))
{
t=i<<;
}
else
t=i;
if((i<<|)<=n)
{
if(stone[t].pos>stone[i<<|].pos||(stone[t].pos==stone[i<<|].pos&&stone[t].dis>stone[i<<|].dis))
{
t=(i<<|);
}
}
if(t!=i)
{
swap(t,i);
i=t;
}
else
flag=;
}
}
int main()
{
int t,tt;
scanf("%d",&t);
for(tt=;tt<t;tt++)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&stone[i].pos,&stone[i].dis);
}
for(int i=n/;i>=;i--)
{
siftdown(i);
}
int step=;
int ans;
while(n>)
{
step++;
if(step&)
{
stone[].pos+=stone[].dis;
ans=stone[].pos;
siftdown();
}
else
{
stone[]=stone[n];
n--;
siftdown();
}
}
printf("%d\n",ans);
}
}
然后屌丝发现c++里边有优先队列的容器:priority_queue
贴容器的使用方法(其实并不怎么懂,只是会用了):
#include<stdio.h>
#include<queue>
using namespace std;
struct st
{
int pos,dis;
};
struct cmp
{
bool operator()(const st &a,const st &b)
{
if(a.pos!=b.pos)
return a.pos>b.pos;
return a.dis>b.dis;
}
};
st stone[];
int main()
{
int t,tt,n;
priority_queue<st,vector<st>,cmp>q;
scanf("%d",&t);
for(tt=;tt<t;tt++)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&stone[i].pos,&stone[i].dis);
q.push(stone[i]);
}
int step=,ans;
st ttt;
while(!q.empty())
{
step++;
ttt=q.top();
q.pop();
if(step&)
{
ttt.pos+=ttt.dis;
q.push(ttt);
}
if(q.empty()){printf("%d\n",ttt.pos);}
}
}
//printf("%d\n",ans);
}
HDU 1896 【留个使用priority_queue容器的样例】的更多相关文章
- 详解C++ STL priority_queue 容器
详解C++ STL priority_queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(priority_queue\)容器的使用方法和常见的使用技巧. priority_queue容器 ...
- hdu 1003 MAX SUM 简单的dp,测试样例之间输出空行
测试样例之间输出空行,if(t>0) cout<<endl; 这样出最后一组测试样例之外,其它么每组测试样例之后都会输出一个空行. dp[i]表示以a[i]结尾的最大值,则:dp[i ...
- Stones HDU 1896
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896 题目大意: 有n个石头,每个石头有:p 它所在的位置 ,d 它能扔多远 从0 开始,遇到第奇 ...
- hdu 1896.Stones 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896 题目意思:给出 n 块石头的初始位置和能到达的距离.对于第奇数次遇到的石头才抛掷,偶数次的就忽略 ...
- hdu 1509 & hdu 1873 & hdu 1896 (基础优先队列)
http://acm.hdu.edu.cn/showproblem.php?pid=1509 裸的优先队列的应用,输入PUT的时候输入名字,值和优先值进队列,输入GRT的时候输出优先值小的名字和对应的 ...
- HDU 1896 Stones (优先队列)
Problem Description Because of the wrong status of the bicycle, Sempr begin to walk east to west eve ...
- HDU 1896 Stones (优先队列)
Stones Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
- HDU 1113 Word Amalgamation (map 容器 + string容器)
http://acm.hdu.edu.cn/showproblem.php?pid=1113 Problem Description In millions of newspapers across ...
- HDU 1896 Stones --优先队列+搜索
一直向前搜..做法有点像模拟.但是要用到出队入队,有点像搜索. 代码: #include <iostream> #include <cstdio> #include <c ...
随机推荐
- Cognos添加维度
1.打开后台cognos中的报表,创建查询主题 填写该维度的名称 以时间维度为例 从左边添加该维度的单位,修改名称(在Cognos前台显示),如果有逻辑在源里面修改下函数 以此类推.
- 在2015年 开发一个 Web App 必须了解的那些事
在过去的一年里,我在从头开始开发我的第一个重要的Web应用.经验教会了很多以前不知道的东西,特别是在安全性和用户体验方面. 值得一提的是,我上一次尝试构建的任何合理复杂性是在2005年.所以,在安全防 ...
- Hbase数据库简介
Hbase是基于Hadoop下分布式存储 数据库,列式存储.(https://www.imooc.com/video/17202) 动态的增加列,不像关系数据库需要提前定义好列. 关系数据库 ...
- 已安全化的ActiveX控件卸载时出现"DllUnregisterServer函数出错,错误代码:0x80070002"问题解决
已安全化的ActiveX控件卸载时出现"DllUnregisterServer函数出错,错误代码:0x80070002"问题解决 情况一:当该控件未注册或者已经卸载时,你尝试卸 ...
- python+Eclipse+pydev环境搭建1
编辑器: Eclipse + pydev插件 1. Eclipse是写JAVA的IDE, 这样就可以通用了,学习代价小. 学会了Eclipse, 以后写Python或者JAVA 都可以. 2. Ec ...
- WebSocket 学习笔记
WebSocket 学习笔记 来自我的博客 因为项目原因需要用到双工通信,所以比较详细的学习了一下浏览器端支持的 WebSocket. 并记录一些遇到的问题. 简介 WebSocket 一般是指浏览器 ...
- sin_addr.s_addr和sin_addr.S_un.S_addr
sin_addr.s_addr和sin_addr.S_un.S_addr 先mark一下,等下写
- 微信小程序wx.request请求服务器json数据并渲染到页面
[原文出自]: https://blog.csdn.net/weixin_39927850/article/details/79766259 微信小程序的数据总不能写死吧,肯定是要结合数据库来做数据更 ...
- BUG笔记 1.0
似乎只要coding,这些代码就要跟我过不去似的 今天在linux上安装了mysql-server,想不到竟然被一个及其简单的问题给难住了. 是的,我竟然无法登陆!!! 在论坛,百度,google上苦 ...
- echart使用自定义单个柱状颜色实现
项目实践中遇到一个根据需要,当X轴等于某个值是,柱状变成特殊颜色的需求,大致有两个方案实现: 1.在前台遍历数据对象,判断设置: 2.在后台拼装数据是,按照格式要求拼装好: 手拉手,用Vue开发动态刷 ...