hdu 1509 & hdu 1873 & hdu 1896 (基础优先队列)

http://acm.hdu.edu.cn/showproblem.php?pid=1509

裸的优先队列的应用,输入PUT的时候输入名字,值和优先值进队列,输入GRT的时候输出优先值小的名字和对应的值

注意的是优先级一样的时候输出顺序在前的

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<queue>
 4 using namespace std;
 5 struct point {
 6     int val,odr,num;
 7     char na[101];
 8     bool operator <(const point & q)const
 9     {
10         if (odr==q.odr) return num>q.num;
11         else return odr>q.odr;
12     }
13 };
14 int main()
15 {
16     char lsy[5];
17     int k=0;
18     point temp;
19     priority_queue<point>que;
20     while (~scanf("%s",lsy))
21     {
22         if (strcmp(lsy,"GET")==0)
23         {
24             if (que.size()!=0)
25             {
26                 temp=que.top();
27                 que.pop();
28                 printf("%s %d\n",temp.na,temp.val);
29             }
30             else
31                 printf("EMPTY QUEUE!\n");
32         }
33         else
34         {
35             scanf("%s %d %d",temp.na,&temp.val,&temp.odr);
36             temp.num=k++;
37             que.push(temp);
38         }
39     }
40     return 0;
41 }

http://acm.hdu.edu.cn/showproblem.php?pid=1873

也很简单的优先队列,有三个医生的,每个医生又自己的顺序,所以可以建立三个队列

 1 #include<cstdio>
 2 #include<queue>
 3 #include<cstring>
 4 using namespace std;
 5 struct point {
 6     int x,num;
 7     bool operator <(const point & q)const
 8     {
 9         if (x==q.x) return num>q.num;
10         else return x<q.x;
11     }
12 };
13 int main()
14 {
15     int t,x,y;
16     char lsy[5];
17     priority_queue<point> a,b,c;
18     point temp;
19     while (~scanf("%d",&t))
20     {
21         int k=1;
22         while (a.size()!=0)
23            a.pop();
24         while (b.size()!=0)
25            b.pop();
26         while (c.size()!=0)
27            c.pop();
28         while (t--)
29         {
30             scanf("%s",lsy);
31             if (strcmp(lsy,"IN")==0)
32             {
33                 scanf("%d %d",&x,&y);
34                 temp.num=k++;
35                 temp.x=y;
36                 if (x==1) a.push(temp);
37                 else if (x==2) b.push(temp);
38                 else c.push(temp);
39             }
40             else
41             {
42                 scanf("%d",&x);
43                 if (x==1)
44                 {
45                     if (a.size()==0)
46                         printf("EMPTY\n");
47                     else
48                     {
49                         temp=a.top(),a.pop();
50                         printf("%d\n",temp.num);
51                     }
52                 }
53                 else if (x==2)
54                 {
55                     if (b.size()==0)
56                         printf("EMPTY\n");
57                     else
58                     {
59                         temp=b.top(),b.pop();
60                         printf("%d\n",temp.num);
61                     }
62                 }
63                 else
64                 {
65                     if (c.size()==0)
66                         printf("EMPTY\n");
67                     else
68                     {
69                         temp=c.top(),c.pop();
70                         printf("%d\n",temp.num);
71                     }
72                 }
73             }
74         }
75     }
76     return 0;
77 }

http://acm.hdu.edu.cn/showproblem.php?pid=1896

题意 遇到第奇数个的石头就把它往前扔规定的距离,遇到第偶数个的石头就不动它 问最远的石头据出发点(起点)的距离

优先队列的应用,想到优先队列就很好解决了

 1 #include<cstdio>
 2 #include<queue>
 3 using namespace std;
 4 struct point {
 5     int x,y;
 6     bool operator <(const point & q) const
 7     {
 8         if (x==q.x) return y>q.y;
 9         else return x>q.x;
10     }
11 };
12 int main()
13 {
14     int t,n;
15     while (~scanf("%d",&t))
16     {
17         while (t--)
18         {
19             int k=1;
20             priority_queue<point> que;
21             point temp;
22             scanf("%d",&n);
23             while (n--)
24             {
25                scanf("%d %d",&temp.x,&temp.y);
26                que.push(temp);
27             }
28             while (!que.empty())
29             {
30                 temp=que.top(),que.pop();
31                 if (k%2==1)
32                 {
33                     temp.x+=temp.y;
34                     que.push(temp);
35                 }
36                 k++;
37             }
38             printf("%d\n",temp.x);
39         }
40     }
41     return 0;
42 }
时间: 2024-10-10 20:02:26

hdu 1509 & hdu 1873 & hdu 1896 (基础优先队列)的相关文章

hdu 1829 A Bug&#39;s Life (基础并查集)

题目: 链接:点击打开链接 题意: 给定虫子的交配关系,确定实验是否支持教授的假设即没有同性恋或者不符合假设. 思路: 是一道基础的并查集题目.存在两个集合异性和同性,给出多组关系,看这两个集合有木有联系,即是否有同性恋. 定义一个数组sex[],sex[i]表示与编号i的性别相反的虫子编号.然后将和i虫子有联系的合并为同一个集合(认为是同性的).如果findset(u) == findset(v),出现了反常行为. 代码: #include <iostream> #include <c

hdu 4006 The kth great number (优先队列+STB+最小堆)

The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 6637    Accepted Submission(s): 2671 Problem Description Xiao Ming and Xiao Bao are playing a simple Numbers game. In a roun

hdu 2147 kiki&#39;s game, 入门基础博弈

博弈的一些概念: 必败点(P点) : 前一个选手(Previous player)将取胜的位置称为必败点. 必胜点(N点) : 下一个选手(Next player)将取胜的位置称为必胜点. 必败(必胜)点属性 (1) 所有终结点是必败点(P点): (2) 从任何必胜点(N点)操作,至少有一种方法可以进入必败点(P点): (3)无论如何操作, 从必败点(P点)都只能进入必胜点(N点). hdu 2147 kiki's game 题意: 在一个m*n的棋盘内,从(1,m)点出发,每次可以进行的移动是

HDU 1874-畅通工程续(Dijkstra+优先队列)

畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 28578    Accepted Submission(s): 10382 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行

hdu 1242:Rescue(BFS广搜 + 优先队列)

Rescue Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 14   Accepted Submission(s) : 7 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Angel was caught by the MOLIGPY

hdu 1195 Open the Lock (bfs+优先队列)

Open the Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4253    Accepted Submission(s): 1858 Problem Description Now an emergent task for you is to open a password lock. The password is c

HDU 5349 MZL&#39;s simple problem(优先队列)

MZL's simple problem Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 776    Accepted Submission(s): 375 Problem Description A simple problem Problem Description You have a multiple set,and now

HDU 4311 Meeting point-1 &amp;&amp; HDU 4312 Meeting point-2

这俩个题  题意::给出N(<1e5)个点求找到一个点作为聚会的地方,使每个点到达这里的距离最小.4311是 曼哈顿距离 4312是 切比雪夫距离: 曼哈顿距离 :大家都知道 对于二维坐标系a(xa,yb),b(xb,yb)的曼哈顿距离是abs(xa-xb)+abs(ya-yb): 看的出来这个距离和x,y 都有关,但是X,Y并不相互影响,所以可以分开计算这样,分开计算的好处如下: 如果 只给一个维度的坐标系 ,我们是不可以再什么养的复杂度的时间内处理出来呢? 大难还是很好想的先排序一下,会发现

hdu 2108 Shape of HDU (数学)

Shape of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5059    Accepted Submission(s): 2294 Problem Description 话说上回讲到海东集团推选老总的事情,最终的结果是XHD以微弱优势当选,从此以后,"徐队"的称呼逐渐被"徐总"所取代,海东集