题目

描述

题目大意

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

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

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

问最短时间。


思考历程

一看就觉得是神仙题,

往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. unity Tilemap

    瓦片地图 创建 生成 创建一个Tile

  2. GPIO_F427

  3. 夏令营501-511NOIP训练18——高二学堂

    传送门:QAQQAQ 题意:给你一个数$n$,把它拆分成至多$k$个正整数,使得这些数的和等于$n$且每一个正整数的个数不能超过$4$ 拆分的顺序是无序的,但取出每一个数方案是不同的(例如我要拆$1$ ...

  4. C++数据类型之字符串类型&布尔类型&数据的输入

    字符串型 **作用**:用于表示一串字符 **两种风格** 1. **C风格字符串**: char 变量名 [ ]  =  "字符串值" 2.**C++风格字符串**:  stri ...

  5. codeforces round#524 D - Olya and magical square /// 大概算是数学规律题?

    题目大意: t 个测试用例  (1≤t≤103) 给定n k  (1≤n≤10^9,1≤k≤10^18) 表示有一个边长为2^n的正方形格子 每次操作只能将一个格子切割为左上左下右上右下的四等分格子 ...

  6. 2018湘潭大学程序设计竞赛【D】

    题目链接:https://www.nowcoder.com/acm/contest/105/D 题意:就是数的fib表示方法.按权展开,又按二进制算出结果输出. 题解:贪心和数论吧.找到跟数最接近的f ...

  7. 科普帖:深度学习中GPU和显存分析

    知乎的一篇文章: https://zhuanlan.zhihu.com/p/31558973 关于如何使用nvidia-smi查看显存与GPU使用情况,参考如下链接: https://blog.csd ...

  8. 21个CSS技巧

    级联样式表(CSS)在当代Web设计中已经成为重要的环节,如果没有CSS现在的网站将像10年前一样不堪入目.随着CSS技术的普及,越来越多的高质量CSS教程涌入互联网,让我们的学习更加方便. 1.CS ...

  9. BlueHost主机建站方案怎样选择?

    BlueHost是知名美国主机商,近年来BlueHost不断加强中国市场客户的用户体验,提供多种主机租用方案,基本能够满足各类网站建设需求.下面就和大家介绍一下建站应该怎样选择主机. 1.中小型网站 ...

  10. redis笔记_源码_简单动态字符串SDS

    参照:https://zcheng.ren/sourcecodeanalysis/theannotatedredissourcesds/#sds%E5%B0%8F%E7%BB%93 这里用char b ...