首页 > 其他分享 >「CF627C」 Package Delivery

「CF627C」 Package Delivery

时间:2024-03-22 15:36:03浏览次数:22  
标签:nxt Package read ll st Delivery 加油站 while CF627C

题意

需要驾驶一辆汽车行驶 \(d\) 单位的距离,汽车的油箱最多装 \(n\) 个单位的油,出发时邮箱装满了油。路上有 \(m\) 个加油站,第 \(i\) 个加油站在距离起点 \(x_i\) 的位置,每个单位的油价值 \(p_i\)。

求到达终点的最小花费,如果无法到达输出 -1

分析

这题和 CSP-J2023 T2 很像,只加了油箱容量的限制,但大体思路是差不多的。

\(nxt_i\) 表示第 \(i\) 个加油站后第一个比它价格低的站。

因为当前价格较高,所以应尽量到 \(nxt_i\) 再加油,若无法直接到达 \(nxt_i\),就在 \(i\) 加油,然后跑到 \(i+1\)。

用单调栈预处理 \(nxt_i\),因为对加油站按 \(x_i\) 排序,总时间复杂度 \(O(m\log m)\)(应该没有 dalao 用桶排)。

Code

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline ll read(){ll x=0,f=1;char c=getchar();while(c<48||c>57){if(c==45)f=0;c=getchar();}while(c>47&&c<58)x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?x:-x;}
const ll maxn=200005;
ll d,n,m,nxt[maxn],now,sum;
struct node{ll x,p;inline bool operator<(const node&b)const{return x<b.x;}}a[maxn];
stack<ll>st;
signed main(){
    d=read(),n=read(),m=read();
    for(ll i=1;i<=m;++i){
        a[i].x=read(),a[i].p=read();
    }
    sort(a+1,a+m+1);
    a[m+1]=(node){d,-1};
    st.push(m+1);
    for(ll i=m;i>=0;--i){
        while(!st.empty()&&a[st.top()].p>a[i].p)st.pop();
        nxt[i]=st.top(),st.push(i);
    }
    now=n;
    for(ll i=0;i<=m;++i){
        ll num=max(0ll,min(a[nxt[i]].x-a[i].x,n)-now);
        sum+=num*a[i].p,now-=a[i+1].x-a[i].x-num;
        if(now<0)puts("-1"),exit(0);
    }
    printf("%lld",sum);
    return 0;
}

标签:nxt,Package,read,ll,st,Delivery,加油站,while,CF627C
From: https://www.cnblogs.com/run-away/p/18089598

相关文章

  • package-lock.json
    生成package-lock.json文件:1、运行npminstall命令,npm将自动生成package-lock.json文件。2、如果你已经安装了依赖,但是没有生成package-lock.json文件:运行npminstall--save命令,这将会更新package-lock.json文件,并确保所有依赖项都被正确记录。3、如果你想要使用package-lock......
  • Rust Package Manager:Cargo
    Cargo是Rust包管理器。Cargo下载您的Rust包的依赖项,编译您的包,制作可分发的包,并将它们上传到crates.io(Rust社区的包注册表)。类似于Python中的pip或Node.js中的npm。Cargo官方文档:TheCargoBook写的十分完美!cargo--list已安装命令:new在当前目......
  • 安装install.package("devtools")时报错 提示systemfonts,textshaping, ragg, gert依赖
    devtools可用conda,R的install.packages()以及wget等方式安装,这里我采用install.packages()安装,碰到systemfonts,textshaping,ragg,gert几个依赖包的安装错误。install.package("devtools")错误形式与解决,参考:https://www.cnblogs.com/shuaihe/p/17823059.html1.systemfonts解......
  • .NET项目轻松配置:掌握Packages.props和Build.props的利用
     概述:`Directory.Packages.props`和`Directory.Build.props`是.NET项目中的配置文件,分别用于统一管理NuGet包引用和自定义MSBuild构建过程。它们提高了解决方案的可维护性,通过集中配置,简化了项目文件,使团队协作更一致,同时避免了在每个项目中重复相同的配置,提高了开发效率。在......
  • 找不到包 Microsoft.NETCore.App.Crossgen2.win-x64。源 Microsoft Visual Studio Off
    问题找不到包System.IO.Packaging,源MicrosoftVisualStudioOffilinePackages中不存在具有此ID的包 解决打开工具-Nuget相关可以尝试再命令行里用 nugetrestore但是这种情况应该是没有设置源。在选项里面,新建一个程序包源,填写以下源地址(或者其他nuget源)就能修复。......
  • Jpackage-制作无需预装Java环境的Jar可执行程序
    JAR包要在预装JRE环境的系统上执行。如果没有预先安装JRE环境,又想直接运行Java程序,该怎么办呢?这篇文章我们会先学习如何将Java程序打包成一个可执行的JavaJAR文件。然后演示如何使用这个JAR文件生成Windows、Linux、MacOS上的可执行程序。我们将使用Java自带......
  • npm 包 package.json 配置文件
    package.json文件每个前端项目中都有package.json文件,它是用于声明依赖的npm包配置文件。1.生成package.json文件yarninit-y{"name":"package.json文件","version":"1.0.0","main":"index.js","license":......
  • Ubuntu服务器使用apt-get安装包时出现E: Unable to locate package
    Ubuntu服务器使用apt-get安装包时出现E:Unabletolocatepackage解决方法首先根据网络情况换源:cat>/etc/apt/sources.list<<"EOF"debhttps://mirrors.shanhe.com/ubuntu/bionicmainrestricteduniversemultiversedeb-srchttps://mirrors.shanhe.com/ubuntu/bioni......
  • WinGet(Windows Package Manager)是什么?
    WinGet(WindowsPackageManager)是什么?WinGet是微软开发的Windows包管理器,它提供了一个命令行界面(CLI),允许用户自动化地安装、配置、更新和卸载Windows软件包。这个工具旨在简化软件管理过程,使得开发者和系统管理员可以更高效地管理Windows系统上的软件。为什么需要WinGet......
  • Eclipse如何让项目中package呈树状显示
    1.问题项目中package呈flat平铺排序,不能显示出相应层级,妨碍我们阅读项目,如何规定其按树状显示?2.解决2.1选择如图所示按键2.2找到PackagePresentation,并选择Hierarchical即树状显示即可......