zoukankan      html  css  js  c++  java
  • 【优先级队列】 Holedox Eating

    https://www.bnuoj.com/v3/contest_show.php?cid=9154#problem/M

    【Accepted】

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<string>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<stack>
     9 #include<map>
    10 using namespace std;
    11 int l,n;
    12 int main()
    13 {
    14     int T;
    15     scanf("%d",&T);
    16     int cas=0;
    17     while(T--)
    18     {
    19         priority_queue<int,vector<int>,greater<int>> qr;
    20         priority_queue<int> ql; 
    21         scanf("%d%d",&l,&n);
    22         int pos=0;
    23         int dir=1;
    24         int ans=0;
    25         for(int i=0;i<n;i++)
    26         {
    27             int op;
    28             scanf("%d",&op);
    29             if(op==0)
    30             {
    31                 int x;
    32                 scanf("%d",&x);
    33                 if(x<pos) ql.push(x);
    34                 else qr.push(x);
    35             }
    36             else
    37             {
    38                 if(!ql.empty()&&!qr.empty())
    39                 {
    40                     int t1=ql.top();
    41                     int t2=qr.top();
    42                     if(pos-t1==t2-pos)
    43                     {
    44                         if(dir==1)
    45                         {
    46                             ans+=t2-pos;
    47                             qr.pop();
    48                             pos=t2;
    49                             dir=1;
    50                         }
    51                         else
    52                         {
    53                             ans+=pos-t1;
    54                             ql.pop();
    55                             pos=t1;
    56                             dir=0;
    57                         }
    58                     }
    59                     else if(pos-t1<t2-pos)
    60                     {
    61                         ans+=pos-t1;
    62                         ql.pop();
    63                         pos=t1;
    64                         dir=0;
    65 
    66                     }
    67                     else if(pos-t1>t2-pos)
    68                     {
    69                         ans+=t2-pos;
    70                         qr.pop();
    71                         pos=t2;
    72                         dir=1;
    73                     }
    74                 }
    75                 else if(!ql.empty())
    76                 {
    77                     int t1=ql.top();
    78                     ans+=pos-t1;
    79                     ql.pop();
    80                     pos=t1;
    81                     dir=0;
    82                 }
    83                 else if(!qr.empty())
    84                 {
    85                     int t2=qr.top();
    86                     ans+=t2-pos;
    87                     qr.pop();
    88                     pos=t2;
    89                     dir=1;
    90                 }
    91             }
    92         }
    93         printf("Case %d: %d
    ",++cas,ans);
    94     }
    95     return 0;
    96 }
    View Code
  • 相关阅读:
    Kubernetes 命令行工具之kubctl
    新一代数据库之Etcd 简介
    算法题 打家劫舍(动态规划)
    算法题 位1的个数
    Class强制类型转换
    算法题 阶乘后的零
    算法题 Excel表列序号
    多数元素
    有序数组两数之和
    一杯果汁和一杯水的故事
  • 原文地址:https://www.cnblogs.com/itcsl/p/7260820.html
Copyright © 2011-2022 走看看