题目

描述

题目大意

在一个数轴上,有些人要从某个点到达另一个点。

出租车从最左端出发,将所有人送到它们的目的地,最终到达最右边的点。

出租车只能做一个乘客,并且可以在图中将乘客丢下。

问最短时间。


思考历程

一看就觉得是神仙题,

往DP方向思考,没有一点点长进……

压根就没有想过贪心……

然而这题又没得打暴力,于是一分都没有拿。


正解

面对这种神仙题,为什么我没有想到贪心……

首先将有用功加入答案中。

出租车走过的路径一定连在一起的,如果我们添加一条从MMM到000的路径,就能保证它最终能到达MMM点。这样路径就构成了一个环。

可以通过各个点将数轴分成很多段,每一段上有一些往左走的路,有一些往右走的路。

大多时候这些向左走和向右走的路径条数是不一样的,但我们求的是环(欧拉回路)。

于是我们相减,取绝对值,强制添加路径。

这样搞出来之后可能不会连通,但由于有条从MMM到000的路径,如果不连通,一定可以有种花费同样代价的方式使得它们串成一个欧拉回路。所以直接添加就好。

那么我们差分处理一下就搞定了。

然后还有一种神奇的方法。

同样要加上MMM到000的路径。

首先将有用功加入答案中,然后的具体做法比较神奇:将起点和终点分别排序,下标相同的坐标相减取绝对值,加入答案中。

然后就没了。

这是什么神仙做法?

根据我的理解,这也是搞出欧拉回路,然后贪心地将起点和终点配对,即连在一起。

配对的时候排序,然后两两配,这样是最小的。我自己想了一个不完整的证明:假设有a1≤a2a_1\leq a_2a1​≤a2​和b1≤b2b_1\leq b_2b1​≤b2​,可以证明∣a1−b1∣+∣a2−b2∣≤∣a1−b2∣+∣a2−b1∣|a_1-b_1|+|a_2-b_2|\leq |a_1-b_2|+|a_2-b_1|∣a1​−b1​∣+∣a2​−b2​∣≤∣a1​−b2​∣+∣a2​−b1​∣。在数轴上分类讨论就可以证明了。

仔细想想,我发现这似乎已经无视了可以把乘客中途扔下车的操作(除了将几个欧拉回路连在一块之外)!

路径分成了很多段,如果拆开来这样做,就相当于可以中途将乘客赶下车,这样一定是没有问题的。这几段中,中间的每个交点既是起点,又是终点,它们自己和自己配对,不会优于与真正的起点终点配对。

这个东西感性理解一下吧……不会证明。


代码

using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100010
int n,end;
struct Op{
int x,ty;
} o[N*2];
int m;
inline bool cmp(const Op &a,const Op &b){
return a.x<b.x;
}
long long ans;
int main(){
scanf("%d%d",&n,&end);
o[++m]={end,-1};
o[++m]={0,1};
for (int i=1;i<=n;++i){
int x,y;
scanf("%d%d",&x,&y);
ans+=abs(x-y);
o[++m]={x,-1};
o[++m]={y,1};
}
sort(o+1,o+m+1,cmp);
for (int i=2,j=o[1].ty;i<=m;++i){
ans+=1ll*(o[i].x-o[i-1].x)*abs(j);
j+=o[i].ty;
}
printf("%lld\n",ans);
return 0;
}

[JZOJ3187]【GDOI2013模拟8】的士的更多相关文章

  1. 【NOIP模拟】的士碰撞(二分答案)

    Description

  2. jzoj3156. 【GDOI2013模拟1】病毒传播

    题意: 村庄里有m个人,初始有一些人感染了病毒.如果第i个人的编号i满足,有一对(a,b)(a是初始病毒感染者编号,b为前一天的感染者编号)使\(a*b mod m =i\),则第i个人会感染病毒.每 ...

  3. 【GDOI2013模拟4】贴瓷砖

    题目 A镇的主街是由N个小写字母构成,镇长准备在上面贴瓷砖,瓷砖一共有M种,第i种上面有Li个小写字母,瓷砖不能旋转也不能被分割开来,瓷砖只能贴在跟它身上的字母完全一样的地方,允许瓷砖重叠,并且同一种 ...

  4. [JZOJ3168] 【GDOI2013模拟3】踢足球

    题目 描述 题目大意 有两个队伍,每个队伍各nnn人. 接到球的某个人会再下一刻随机地传给自己人.敌人和射门,射门有概率会中. 每次射门之后球权在对方111号选手. 某个队伍到了RRR分,或者总时间到 ...

  5. [JZOJ3167] 【GDOI2013模拟3】查税

    题目 描述 题目大意 维护一个有一次函数组成的序列 具体来说,对于位置xxx,现在的值为sx+zx∗(T−tx)s_x+z_x*(T-t_x)sx​+zx​∗(T−tx​) 有两个操作,修改某个位置上 ...

  6. [JZOJ3171] 【GDOI2013模拟4】重心

    题目 描述 题目大意 有一堆长为222的矩形,最下面的右端点横坐标为000. 每个矩形都有其固定的质量. 将这些矩形堆在一起,使得最右边的横坐标最大,并且满足它不会塌掉(满足物理学). 思考历程 首先 ...

  7. [JZOJ3177] 【GDOI2013模拟5】安全监控

    题目 描述 (样例都懒得发出来了) 题目大意 给你一个有向图,从111号点出发,绕一圈回来.这一圈中必须经过222号点. 问经过的最少的点数(不重复). 思考历程 一看就觉得是一道神题. 然后仔细观察 ...

  8. 不熟,不会,未a的题列表

    不熟: jzoj5968. 电竞选手(不知道公式如何得来) jzoj4877. [NOIP2016提高A组集训第10场11.8]力场护盾 (对向量不熟悉,不知道为什么结果要取反) jzoj4867. ...

  9. 编写Java程序,几个朋友到游乐场游玩,大家投票选择出行方式。使用程序来模拟这一结果。(工厂模式示例Demo)

    查看本章节 查看作业目录 需求说明: 几个朋友到游乐场游玩,大家投票选择出行方式.如果选择"A"最多的话,表示选择的交通工具是公交车(Bus):如果选择"B"最 ...

随机推荐

  1. [Python]PDF合成小程序PDF合成小程序

    运行平台:Python3.5 用刀了PyPDF2这个库,需要提前下载好. 源码如下: import PyPDF2, os #建立一个装pdf文件的数组pdfFiles = [] for fileNam ...

  2. Quartz2作业监听

    在本教程中,我们将展示/介绍如何创建一个JobListener,跟踪运行工作状态在作业完成等. P.S 这个例子是Quartz 2.1.5 1. Quartz 作业 作业 - 用于打印一个简单的信息, ...

  3. 利用zk客户端删除solr shard

    进入zk客户端 ./bin/zkCli.sh -server ip:2181 显示所有的内容: ls / 删除数据: rmr /filename path

  4. 协方差及matlib绘制

    转自http://www.cnblogs.com/chaosimple/p/3182157.html 一.统计学的基本概念 统计学里最基本的概念就是样本的均值.方差.标准差.首先,我们给定一个含有n个 ...

  5. Alice拜年 模板题 /// 最短路Dijk oj1344

    题目大意: 大年初一,Alice带上拜年礼物去给N-1位亲朋好友长辈拜年,亲友真多啊,是个大家族.由于Alice才2岁,力气不大,每次只能拿一份礼物,拜完年之后,要回家取第二份礼物,然后去下一家拜年( ...

  6. Spring Security 自定义登录页面

    SpringMVC + Spring Security,自定义登录页面登录验证 学习参考:http://www.mkyong.com/spring-security/spring-security-f ...

  7. 判断APP是否已安装

    NSString *str = [NSString stringWithFormat:@"%@://%@",[dic objectForKey:@"ios_url_sch ...

  8. 关于 argc 和 argv

    https://stackoverflow.com/questions/3898021/regarding-mainint-argc-char-argv 当使用命令行启动程序,或者给程序传输参数时,可 ...

  9. LUOGU P4322 [JSOI2016]最佳团体(0/1分数规划+树形背包)

    传送门 解题思路 一道0/1分数规划+树上背包,两个应该都挺裸的,话说我常数为何如此之大..不吸氧洛谷过不了啊. 代码 #include<iostream> #include<cst ...

  10. vue双向绑定的原理

    什么是双向数据绑定?Vue是一个MVVM框架,数据绑定简单来说,就是当数据发生变化时,相应的视图会进行更新,当视图更新时,数据也会跟着变化. 实现数据绑定的方式大致有以下几种: - 1.发布者-订阅者 ...