用优先队列储存每个人的初始距离和编号,每轮求出最快的人,然后pop掉

一开始想遍历队列的,后来发现队列没办法遍历,汗-_-!

题意,给几个第一秒冲出的距离和以后速度,求每秒后最前面人的编号,求完后最前面的退出

2
3
100 1
100 2
3 100
5
1 1
2 2
3 3
4 1
3 4
Case #1:
1 3 2
Case #2:
4 5 3 2 1
Hint
The first case: 1st Second end
Player1 100m (BOOM!!)
Player2 100m
Player3 3m 2nd Second end
Player2 102m
Player3 103m (BOOM!!) 3rd Second end
Player2 104m (BOOM!!)
 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=;
int n,m,t;
struct node
{
int id;
int dis;
int v;
node(){}
friend bool operator<(node a,node b)
{
if(a.dis!=b.dis) return a.dis<b.dis; //距离大的先出队
else return a.id>b.id;
}
};
priority_queue<node> q[maxn];
int main()
{
int i,j,k;
//freopen("1.in","r",stdin);
scanf("%d",&t);
node qq;
int s,v,ca=;
while(t--)
{
ca++;
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d%d",&qq.dis,&v);
qq.id=i;
q[v].push(qq);
}
printf("Case #%d:\n",ca);
for(i=;i<n;i++)
{
int fast=-,iid=; //最快的人距离和编号
for(j=;j<=;j++)
{
if(!q[j].empty())
{
node temp=q[j].top();
if(temp.dis+i*j>fast) fast=temp.dis+i*j,iid=j;
else if(temp.dis+i*j==fast&&temp.id<q[iid].top().id)iid=j;
}
}
printf("%d",q[iid].top().id);
q[iid].pop();
if(i<n-)printf(" ");
else printf("\n");
}
}
return ;
}

hdu 4393 优先队列的更多相关文章

  1. hdu 4393 Throw nails(STL之优先队列)

    Problem Description The annual school bicycle contest started. ZL is a student in this school. He is ...

  2. HDU 4393 Throw nails(优先队列)

    优先队列的应用 好坑,好坑,好坑,重要的事情说三遍! #include<iostream> #include<cstdio> #include<cstring> # ...

  3. hdu 5306 优先队列

    用到优先队列 #include<iostream> #include<string> #include<algorithm> #include<cstdio& ...

  4. HDU 4006 优先队列

    The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

  5. hdu 5818 (优先队列) Joint Stacks

    题目:这里 题意: 两个类似于栈的列表,栈a和栈b,n个操作,push a x表示把数x放进a栈的栈底,pop b 表示将栈b的栈顶元素取出输出,并释放这个栈顶元素,merge a b表示把后面的那个 ...

  6. hdu 4302 优先队列

    进一步学习了优先队列的用法 题意:一只小动物在直线上走,起始位置为零,之后会出现食物,动物要去距离自己最短的食物那,若两边的食物距离相等,则选择之前走的方向的食物 0 x,代表x的位置出现了食物,1代 ...

  7. HDU 1058 优先队列or堆

    本来应当是一道优先队列或者堆的题 因为每个数都应该是已经得到的数*2 *3 *5 *7而得到的 但是 2*7 大于 3*2 这就必须保证每次取得都是没有拿过的最小的数 但是它主动降低难度在样例里卖了个 ...

  8. hdu 2258 优先队列

    Continuous Same Game (1) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  9. HDU 4393 Throw nails

    Throw nails Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

随机推荐

  1. 修改php执行用户,并使其拥有root权限

    useradd apachephp vi /etc/httpd/conf/httpd.conf 将组和用户修改成apachephp,重启apache,然后用lsof -i:80查看apache的执行用 ...

  2. jsp页面添加一个集合数组到action(用序列化提交)

    页面的js //点击a标签增加删除 var i=0; $("#a").on("click",function(){ var $newtr = $("& ...

  3. Java-UDP Socket编程

    UDP 的 Java 支持 UDP 协议提供的服务不同于 TCP 协议的端到端服务,它是面向非连接的,属不可靠协议,UDP 套接字在使用前不需要进行连接.实际上,UDP 协议只实现了两个功能: 在 I ...

  4. C++小思

    Bjarne那稀疏的棕褐色头发, 有点红的眼睛, 这个可爱的好老头, 感觉他更应该是一个哲学家, 因为他用编程的语言C++ 揭示了我们这个纷繁复杂世界的本质: 对象. 对的, 世界是由对象组成的, 并 ...

  5. URAL 1936 Roshambo 题解

    http://acm.timus.ru/problem.aspx?space=1&num=1936 F - Roshambo Time Limit:1000MS Memory Limit:65 ...

  6. 错误 1 未知的服务器标记“asp:ScriptManager”。

    如题 ... 解决方案 :将 <%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=ne ...

  7. 将List<int> 转换为用逗号连接为字符串

    List<, , , , }; string str = String.Join(",", testList.ConvertAll<string>(new Con ...

  8. HDOJ 3555 Bomb

    数位DP的DFS写法.... Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Oth ...

  9. Android第三方jar包ClassNotFind

    转载请注明http://www.cnblogs.com/vanezkw/archive/2012/06/25/2561393.html 相信很多朋友在使用第三方包时都遇到过此类问题.今天就此问题进行一 ...

  10. hiho一下 第九十七周 数论六·模线性方程组

    题目1 : 数论六·模线性方程组 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:今天我听到一个挺有意思的故事! 小Hi:什么故事啊? 小Ho:说秦末,刘邦的将军 ...