这道题值得好好想一会

我们通过对一些小数据的手算,以及对于每段路程的拆分,可以发现:

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 ;
}

最新文章

  1. CentOS Mono Nginx 部署 MVC4+WebApi
  2. HTTP报文
  3. Java Random
  4. json-lib 使用教程
  5. 第八章: IO库
  6. Windows 2008 卸载 IIS7 批处理
  7. Playmaker 基础使用与案例操作
  8. 8.8.1 Super关键字
  9. Java-----关于eclipse导入项目发生的问题及解决办法
  10. A Deep Learning-Based System for Vulnerability Detection(二)
  11. 前端了解即可:OSS客户端如何使用,以实现资源分离
  12. keepalived 工作原理
  13. pyqt5 设置窗口按钮等可用与不可用
  14. php中memcached的使用
  15. mycat-&gt;oracle报java.sql.SQLException: 无法从套接字读取更多的数据
  16. Android APK 签名比对(转)
  17. .Net 环境下C# 通过托管C++调用本地C++ Dll文件
  18. fatal error LNK1104: 无法打开文件“libc.lib”的问题 (转)
  19. python之首字母大写
  20. zabbix 介绍

热门文章

  1. angular中ng-model,返回数据,拆分数据,展示,名称相同,重新赋值会有冲突
  2. Cdnbes负载均衡的权重用法解释
  3. PHP的版本选择 (转)
  4. 重复数据分析的三个常用语法distinct, group by, partition by
  5. LVS简单实现NAT&amp;DR模型
  6. C. Shaass and Lights 组合数学
  7. .Net Mail SMTP 发送网络邮件
  8. 第三章 centos安装git
  9. C#获取程序集自动增加的版本号和编译时间
  10. sql模糊匹配中%、_的处理