• SP348 EXPEDI


     1 //贪心+优先队列(二叉堆)
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<queue>
     5 #include<algorithm>
     6 using namespace std;
     7 const int N=1000050;
     8 #define val first
     9 #define dis second
    10 int T,n,l,s,ans,now;
    11 typedef pair<int,int> p;
    12 inline bool cmp(const p &a,const p &b){
    13     return a.dis<b.dis;
    14 }
    15 p a[N];
    16 priority_queue<int> q;//大根堆 
    17 int main(){
    18     scanf("%d",&T);
    19     while(T--){
    20         ans=now=0;//每次清空答案 
    21         scanf("%d",&n);
    22         for(int i=1;i<=n;++i) scanf("%d%d",&a[i].dis,&a[i].val);
    23         scanf("%d%d",&l,&s);
    24         for(int i=1;i<=n;++i) a[i].dis=l-a[i].dis;//处理所有距离方便计算 
    25         sort(a+1,a+1+n,cmp);//把每个点按离起点的距离排序 
    26         while(!q.empty()) q.pop();//清空二叉堆 
    27         a[++n].dis=l;//把终点当做最后一个点 避免最后再判断 
    28         for(int i=1;i<=n;++i){
    29             int d=a[i].dis-now;//当前位置到下一个点的距离 
    30             while(s<d){//若油不够 
    31                 if(q.empty()) {ans=-1;goto Nex;}//以前加不到足够的油则无解 
    32                 s+=q.top();q.pop();++ans;//从以前经过的点加最多的油 
    33             }
    34             s-=d;now=a[i].dis;//更新现在油量和所在位置 
    35             q.push(a[i].val);//把到达点的油量塞进堆里备用 
    36         }
    37         Nex:
    38         printf("%d
    ",ans);
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    理解并使用.NET 4.5中的HttpClient
    响应式图片的3种解决方案
    Rest模式get,put,post,delete含义与区别
    Multiple websites on single instance of IIS
    C# 消息队列-MSMQ
    微服务 Micro services
    SQL Server For XML
    Real-time chart using ASP.NET Core and WebSocket
    ASP.NET Core Building chat room using WebSocket
    Ajax 调用的WCF
  • 原文地址:https://www.cnblogs.com/yu-xing/p/10336360.html
Copyright © 2020-2023  润新知