COCI. RIJEKA
COCI.RIJEKA
一个例子。A要从村庄2到村庄8,B要从村庄6到村庄4。MIRKO可以先从0到2让A上船,然后到6,让B上船,然后到4让B下,然后到8,最后到M。
INPUT
第一行两个整数 N and M (N ≤ 300 000, 3 ≤ M ≤ 10^9).
接下来N行,每行两个整数,表示人们的要求.
OUTPUT
一个数,表示最短距离.
SCORING
In test cases worth a total of 40% points, N ≤ 5000 will hold.
In test cases worth a total of 50% points, M ≤ 2000000 will hold.
EXAMPLE TEST DATA
input
2 10
2 8
6 4
output
14
input
8 15
1 12
3 1
3 9
4 2
7 13
12 11
14 11
14 13
output
27
我们需要从0走到m
那么如果一个任务是是正向的
a->b a<=b的话,那么我们可以顺路得完成,不用多余的路
1和2都被顺路完成
而3是从0-m是最长的,我们就可以知道,如果任务是a->b a<=b的都可以被忽略,因为都可以被顺路完成
那么我们现在就只用考虑a->b a>b 倒着走的
逆向的情况根据刚刚我们正向分析的性质,也只到包含关系的内部可以省略
5可以省略
所以最后我们只用考虑的情况是
考虑我们是把4完成了,再完成5,还是4,5一起完成?
我们发现4,5一起完成会少走他们交集的那么段路
并且我们发现多个情况,也是一起完成是会更优
所以我们就有了贪心策略
只有有交集的都一起完成,否则就单独完成
附上代码:
#include<bits/stdc++.h> using namespace std; const int N=3e5+12; int n,m; struct node {int l,r;bool operator < (const node & other )const {if(l==other.l) {return r<other.r;}return l< other.l;} }edge[N]; int cnt; long long f[N];int main() {freopen("a.in","r",stdin);freopen("a.out","w",stdout);scanf("%d%d",&n,&m);int a,b;for(int i=1;i<=n;i++) {scanf("%d%d",&a,&b);if(a<=b) continue;edge[++cnt]=(node){b,a};}sort(edge+1,edge+cnt+1);int mx=0;int temp=cnt;cnt=0;for(int i=1;i<=temp;i++) {if(edge[i].r<=mx) continue;edge[++cnt]=edge[i];mx=max(mx,edge[i].r);}f[1]=1LL*edge[1].l+(long long)(edge[1].r-edge[1].l)*3;int l=edge[1].l,r=edge[1].r;int id=1;for(int i=2;i<=cnt;i++) {if(edge[i].l<=r) {f[i]=f[id-1]+(long long)(edge[i].r-l)*3+1LL*(edge[id].l-edge[id-1].r);r=max(r,edge[i].r);}else {f[i]=f[i-1]+(long long)(edge[i].r-edge[i].l)*3*1LL+1LL*(edge[i].l-edge[i-1].r);l=edge[i].l;r=edge[i].r;id=i;}}long long ans=f[cnt]+1LL*(m-edge[cnt].r);printf("%lld\n",ans);return 0; }
转载于:https://www.cnblogs.com/Heey/p/9125993.html
COCI. RIJEKA相关推荐
- [COCI2015]COCI
[COCI2015]COCI 题目大意: 有\(n(n\le5\times10^5)\)个人比赛,比赛总共进行\(3\)轮,每一轮得分为\([0,650]\)内的整数.现在已经得知每个人前两轮的成绩. ...
- [COCI 2017-2018-2]-San
[COCI 2017-2018-2]-San san(1s64M) 游戏世界中有N个楼从左到右排列,从左到右编号为1到N,第i幢楼的高度为Hi,楼上的金币数为Gi,游戏可以从任意一个楼开始且包涵几步. ...
- 洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树
题目传送门: 洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树 题目描述 伐木工人 Mirko 需要砍 M 米长的木材.对 Mirko 来说这是很简单的工作,因为他有一个漂亮 ...
- 洛谷P1873 [COCI 2011/2012 #5] EKO / 砍树(二分法)
题目链接 : 洛谷P1873 [COCI 2011/2012 #5] EKO / 砍树 文章目录 前言 一.题目 题目描述 输入格式 输出格式 输入输出样例 说明/提示 二.代码 前言 第一次写博客, ...
- 【C++】洛谷P1873 [COCI 2011/2012 #5] EKO / 砍树
[COCI 2011/2012 #5] EKO / 砍树 题目描述 伐木工人 Mirko 需要砍 MMM 米长的木材.对 Mirko 来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一般砍 ...
- 寒假作业:COCI 2014/2015题选 题目与题解
目录 T1 MAFIJA 题目 题解 T2 ZABAVA 题目 题解 T3 KAMP 题目 题解 T4 BOB 题目 题解 T5 SUMA 题目 题解 T6 NORMA 题目 题解 T7 COCI 题 ...
- 《二分答案》—— P1873 [COCI 2011/2012 #5] EKO / 砍树
[COCI 2011/2012 #5] EKO / 砍树 题目描述 伐木工人 Mirko 需要砍 M M M 米长的木材.对 Mirko 来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一 ...
- COCI 2018/2019 CONTEST #2 T4 Maja T5Sunčanje Solution
COCI 2018/2019 CONTEST #2 T4 T5 Solution abstract 花式暴力 #2 T5 Sunčanje 题意 按顺序给你1e5个长方形(左下角坐标&& ...
- COCI 2020/2021 Svjetlo(树形DP)
COCI 2020/2021 Svjetlo 题目大意 求最短的树上路径(可以重复经过点或边)长度使得经过每个点的次数满足给定的奇偶性.树的大小为NNN. N≤500000N\le 500000N≤5 ...
最新文章
- 假装不知道有尽头(博弈论的诡计)
- android -各种适配器
- Android属性 android:focusableInTouchMode
- java新手笔记21 接口
- Ajax缓存解决办法
- [scala-spark]11. RDD控制操作
- 大厅安排(normal)
- Hadoop大数据——mapreduce的Distributed cache
- 【转】3.3(译)构建Async同步基元,Part 3 AsyncCountdownEvent
- JEECG第二期深入使用培训(报名截止2014-06-21)
- WPF下递归生成树形数据绑定到TreeView上
- 去除Many2one字段的“创建并编辑”选项
- 平面直角坐标系中的旋转公式_【初中数学大招流】从平面几何到解析几何
- 如何制作简单的html静态网页
- java dwg转pdf_java实现CAD图纸文件DWG格式转为PDF格式
- 基于R语言的聚类(谱聚类)
- 成都旅游住宿购物交通攻略87
- 标准化学校考场自动校时同步时钟系统
- 质因数的分解(java)
- 计算机网络进阶 ---- 网络类型 ---- 二层封装协议 ---- HDLC ---- PPP ---- pap认证 ---- chap认证 ---- 详解
热门文章
- python双重直方图_Python 2.x中两幅图像的直方图匹配?
- redis sigterm 信号
- Sinc函数同一个定积分, 三种不同的方法
- 给大家推荐一款免费虚拟主机 优豆云
- 计算方法 [课程学习]
- 中国科学家构建世界首台超越早期经典计算机的光量子计算机
- Jumony Core 2.2 发布
- 计算机设备制造行业概述,计算机整机制造行业分析报告_中国计算机整机制造行业市场需求与投资规划分析报告-前瞻产业研究院...
- cv2 imread()函数
- access中本年度的四月一日_计算机二级ACCESS上机题