hdu4393 Throw nails【优先队列&&贪心&&模拟】
来源:互联网 发布:2016年速卖通销售数据 编辑:程序博客网 时间:2024/06/05 10:17
题目大意:
给你n个人,他们在进行一场自行车竞速比赛,每个人在第1s时走Fi米,以后每秒走Si米,一个小孩在仍钉子破坏比赛,每秒他都选最靠前的那个人,如果有多个人,选编号最小的那个,问你这些人依次被破退出比赛的顺序。(1 <= n <= 50000)(0 <= Fi <= 500)(0 < Si <= 100)
解题思路:
开始时只看到1 <= n <= 50000,一直在想怎么用数据结构做。
后面发现0 <= Fi <= 500,0 < Si <= 100,这就成水题了。
先说最水的做法。
很容易想到如果大家Fi都为相同,就只与速度有关了,所以关键在于讨论Fi不同所带来的影响
注意0 <= Fi <= 500,所以最多当501秒时,Fi的影响就完全消失了……所以前501秒暴力模拟,以后直接比速度即可……是不是感觉智商被强奸了……
再说说有点逼格的做法。
刚刚的做法是消除了Fi的影响,现在想想消除速度的影响。
假设速度都一样,那就只与Fi有关了,又注意到0 < Si <= 100,所以可以开101个优先队列,把速度相等的选手都放在一个队列里,按Fi排序,以后每次把101个队首提出作比较即可。
其实这样的做法有点像NOIP2016的“蚯蚓”一题。都利用了单调性这一特点。
贴了份优先队列的代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<vector>#include<queue>#define ll long longusing namespace std;int getint(){ int i=0,f=1;char c; for(c=getchar();(c<'0'||c>'9')&&c!='-';c=getchar()); if(c=='-')f=-1,c=getchar(); for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0'; return i*f;}const int N=50005;int T,n;priority_queue<pair<int,int> >q[101];int main(){ //freopen("lx.in","r",stdin); T=getint(); for(int C=1;C<=T;C++) { printf("Case #%d:\n",C); n=getint(); for(int i=0;i<=100;i++) while(!q[i].empty())q[i].pop(); for(int i=1;i<=n;i++) { int f=getint(),s=getint(); q[s].push(make_pair(f,-i)); } for(int t=1;t<=n;t++) { int id=0,ans=-1; for(int i=0;i<=100;i++) { if(q[i].empty())continue; int d=q[i].top().first+(t-1)*i; int u=-q[i].top().second; if(ans<d||ans==d&&u<-q[id].top().second) ans=d,id=i; } if(t==n)printf("%d\n",-q[id].top().second); else printf("%d ",-q[id].top().second); q[id].pop(); } } return 0;}
阅读全文
0 0
- hdu4393 Throw nails【优先队列&&贪心&&模拟】
- HDU 4393 Throw nails(技巧性模拟)
- HUD4393 Throw nails(思维模拟)
- hdu4393(模拟+queue)
- hdu 4393 Throw nails
- hdu 4393 Throw nails
- HDU 4393 Throw nails
- hdu 4393 Throw nails
- HDU 4393 Throw nails
- HDU 4393 Throw nails
- 【NOI2017模拟4.4】保持平衡【优先队列,贪心】
- POJ 3465 Battle(优先队列+贪心模拟)
- hdu 4393 Throw nails 相同的状态做相同的处理 贪心
- poj3614-贪心、优先队列
- EOJ1855 贪心+优先队列
- uvalive4254(贪心+优先队列)
- HOJ1062 贪心+优先队列
- poj3465 贪心+优先队列
- 获取access_token报错"errcode": 40125,"errmsg": "invalid appsecret, view more at http://t.cn/RAEkdV
- 不在以下 request 合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/
- andorid-studio 底部sliderbar 的message等不显示的问题
- [App] Nginx 通过 https 方式访问
- Jenkins和cruisecontrol都是CI工具
- hdu4393 Throw nails【优先队列&&贪心&&模拟】
- android:text 与tools:text
- 【noi2001】方程的解数
- [Unity][Android]PC与Android设备传输的文章
- 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)
- 八小时实现迷你版vuejs三:实现数据响应化
- Cannot change version of project facet Dynamic web module to 2.5
- 集成阿里百川的坑-【SDK初始化-iOS】读取身份图片AppKey失败
- 第六节、插件配置:配置js压缩