zoukankan      html  css  js  c++  java
  • 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
    ",temp.na,temp.val);
    29             }
    30             else
    31                 printf("EMPTY QUEUE!
    ");
    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
    ");
    47                     else
    48                     {
    49                         temp=a.top(),a.pop();
    50                         printf("%d
    ",temp.num);
    51                     }
    52                 }
    53                 else if (x==2)
    54                 {
    55                     if (b.size()==0)
    56                         printf("EMPTY
    ");
    57                     else
    58                     {
    59                         temp=b.top(),b.pop();
    60                         printf("%d
    ",temp.num);
    61                     }
    62                 }
    63                 else
    64                 {
    65                     if (c.size()==0)
    66                         printf("EMPTY
    ");
    67                     else
    68                     {
    69                         temp=c.top(),c.pop();
    70                         printf("%d
    ",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
    ",temp.x);
    39         }
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    ZoneJS 的原理与应用
    RxJS 中的观察者和迭代器模式
    前端三大框架:数据绑定与数据流
    Angular 的前世今生
    验证Kubernetes YAML的最佳实践和策略
    GitOps初阶指南:将DevOps扩展至K8S
    如何使用Istio 1.6管理多集群中的微服务?
    5个规则,确保你的微服务优化运行
    使用Thanos实现Prometheus指标联邦
    丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!
  • 原文地址:https://www.cnblogs.com/JJCHEHEDA/p/4810426.html
Copyright © 2011-2022 走看看