【洛谷P3076】Taxi
2024-10-10 07:06:57
这道题值得好好想一会
我们通过对一些小数据的手算,以及对于每段路程的拆分,可以发现:
1.每个st对应的ed这段路程无论如何都要算上
2.额外还要计算的一段路程,就是“切换”费用
什么是切换费用呢?
我们知道可能会有这样的位置st,到达该位置时,把已经在车上的牛 i 扔下去,载上该处的牛 j 并将它运到其终点ed再回来把牛 i 载上
那么我们就需要再加上每一对abs(ed-st)的和
具体实现,我们需要在st、ed中再加上终点m,起点0,
但是要注意的是,0加到ed里,m加到st里
原因在于我们需要从起点0走到最近的st,从最远的ed走到m
所以0对应的就是min_st,0必然在ed里的第一个;m也一样
最后将st,ed排序,枚举累加即可
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int n,m,st[N],ed[N];
long long ans=;
int read(){
int sum=;
char ch=getchar();
while (ch<''||ch>'')
ch=getchar();
while (ch>=''&&ch<=''){
sum=sum*+ch-'';
ch=getchar();
}
return sum;
}
int main(){
n=read();
m=read();
for (int i=;i<=n;i++){
st[i]=read();
ed[i]=read();
ans+=abs(st[i]-ed[i]);
}
st[n+]=m;//最远的ed开到m
ed[n+]=;//0开到最近的st
sort(st+,st+n+);
sort(ed+,ed+n+);
for (int i=;i<=n+;i++)
ans+=abs(ed[i]-st[i]);
printf("%lld",ans);
return ;
}
最新文章
- CentOS Mono Nginx 部署 MVC4+WebApi
- HTTP报文
- Java Random
- json-lib 使用教程
- 第八章: IO库
- Windows 2008 卸载 IIS7 批处理
- Playmaker 基础使用与案例操作
- 8.8.1 Super关键字
- Java-----关于eclipse导入项目发生的问题及解决办法
- A Deep Learning-Based System for Vulnerability Detection(二)
- 前端了解即可:OSS客户端如何使用,以实现资源分离
- keepalived 工作原理
- pyqt5 设置窗口按钮等可用与不可用
- php中memcached的使用
- mycat->;oracle报java.sql.SQLException: 无法从套接字读取更多的数据
- Android APK 签名比对(转)
- .Net 环境下C# 通过托管C++调用本地C++ Dll文件
- fatal error LNK1104: 无法打开文件“libc.lib”的问题 (转)
- python之首字母大写
- zabbix 介绍