zoukankan      html  css  js  c++  java
  • 51nod1288汽油补给

    考虑当前这个汽油站加的情况。

    如果在t以内的范围有一个加油站比当前加油站便宜,那么就只需要加油加到足够开到最近的比自己便宜的加油站。

    否则加满。

    但是寻找超时

    我们可以先加满,找到一个便宜的加油站之后,把自己多出来的油“倒回去”。

    这样就可以了。

    代码:

    #include<bits/stdc++.h>
    using namespace std;  
    typedef long long ll; 
    const int N=200005; 
    struct no  
    {  
        ll price,num;  
    };   
    bool cmp(no x,no y)
    {
        return x.price<y.price;
    }
    ll n,t,dis[N],pri[N];
    int main()   
    {  
        scanf("%lld%lld",&n,&t);  
        for (int i=1;i<=n;i++)scanf("%d%d",&dis[i],&pri[i-1]);
        vector<no>qu;  
        int flag=1;  
        ll res=0;  
        for (int i=1;i<=n;i++)
         if (dis[i]>t)
          {
              puts("-1");
              return 0;
          }
        for (int i=0;i<=n;i++)
         {
            if (!i)  
             {  
                no n1={pri[0],t};  
                qu.push_back(n1);  
             }  
            else  
             {  
                sort(qu.begin(),qu.end(),cmp);  
                ll di=0,rmin=0;  
                while (1)  
                 {  
                    if (di+qu[0].num>=dis[i])  
                     {  
                        rmin=rmin+(dis[i]-di)*(qu[0].price);  
                        if (di+qu[0].num>=dis[i])  
                         qu[0].num=qu[0].num-(dis[i]-di);  
                        if (!qu[0].num)qu.erase(qu.begin());    
                        break;  
                     }  
                    else  
                     {  
                        di+=qu[0].num;  
                        rmin+=qu[0].num*qu[0].price;  
                        qu.erase(qu.begin());  
                     }  
                 }  
                res+=rmin;  
                ll sum=0;  
                for (int k=0;k<qu.size();k++)  
                 {  
                    if (pri[i]>qu[k].price)sum+=qu[k].num;  
                    else  
                     {  
                        no n1;  
                        n1.num=t-sum;  
                        n1.price=pri[i];  
                        qu.erase(qu.begin()+k,qu.end());  
                        qu.push_back(n1);  
                        sum=t;  
                        break;  
                     }  
                 }  
                if (sum<t)  
                 {  
                    no n1;  
                    n1.price=pri[i];  
                    n1.num=t-sum;  
                    qu.push_back(n1);  
                 }  
             }  
         }
        printf("%lld",res);  
    }  
  • 相关阅读:
    Eureka与Zookeeper的区别
    Eureka的集群配置
    Rest微服务案例
    Eureka概述
    SpringCloud与Dubbo区别对比
    各种微服务框架对比
    ElasticSearch(九):elasticsearch-head插件安装
    ElasticSearch(八):elasticsearch.yml配置说明
    Docker(2):使用Dockerfile创建支持SSH服务的镜像
    CentOS 7 安装Kubernetes(单机版)
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/7497580.html
Copyright © 2011-2022 走看看