博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51Nod 1091:线段的重叠(贪心)
阅读量:5759 次
发布时间:2019-06-18

本文共 1785 字,大约阅读时间需要 5 分钟。

                                     

基准时间限制:1 秒 空间限制:131072 KB 分值: 5 

 收藏

 关注

X轴上有N条线段,每条线段包括1个起点和终点。线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]。

给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长的。输出这个最长的距离。如果没有重叠,输出0。

Input

第1行:线段的数量N(2 <= N <= 50000)。第2 - N + 1行:每行2个数,线段的起点和终点。(0 <= s , e <= 10^9)

Output

输出最长重复区间的长度。

Input示例

51 52 42 83 77 9

Output示例

4

思路

有两种写法,但是思路都是差不多的,不同的是排序的方法有点区别

  1. 按照区间起点升序排序,如果起点相同,按终点升序排序。用一个数n记录排序后第一个区间的终点,然后对后面n-1个区间进行比较。如果第i个区间的终点小于k,那么区间覆盖的长度为第i个的终点减去起点,此时k值不变。如果第i个区间的终点大于k,那么区间覆盖的长度为k减去第i个区间的起点,并把k值更新为第i个区间的终点。记录下此时区间覆盖长度的最大值
  2. 按照区间起点升序排序,如果起点相同,按终点降序排序。用两个数s,e记录第一个区间的起点和终点。每次进行过一个区间,如果e小于区间的终点,更新s,e的值。(和上一种写法基本上是一样的,对于s,e的更新也是和上面k的更新条件一样,唯一不同的就是排序方式)。

AC代码

第一种

#include
using namespace std;struct wzy{ int begin,end;}p[50000+10];bool cmp(wzy u,wzy v){ if(u.begin==v.begin) return u.end
>n; for(i=0;i
>p[i].begin>>p[i].end; sort(p,p+n,cmp); for(i=1,k=p[0].end;i
=k) { maxn=max(maxn,k-p[i].begin); k=p[i].end; } else { maxn=max(maxn,p[i].end-p[i].begin); } } cout<
<

第二种

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define ms(a) memset(a,0,sizeof(a))#define pi acos(-1.0)#define INF 0x3f3f3f3fconst double E=exp(1);const int maxn=1e6+10;using namespace std;struct wzy{ int first,end;}p[maxn];bool cmp(wzy u,wzy v){ if(u.first==v.first) return u.end>v.end; return u.first
>n; for(int i=0;i
>p[i].first>>p[i].end; } sort(p,p+n,cmp); for(int i=0;i
=p[i].end) ans=p[i].end-p[i].first; _=max(ans,_); if(e>=p[i].end) continue; s=p[i].first; e=p[i].end; } cout<<_<

 

转载于:https://www.cnblogs.com/Friends-A/p/10324424.html

你可能感兴趣的文章
浅谈AC自动机
查看>>
C#如何提取PPT中 SmartArt文本和批注中的文本
查看>>
通过文本查找元素
查看>>
统计数据库大小
查看>>
Asp.net MVC3学习案例
查看>>
IO流的学习--文件夹下文件的复制
查看>>
第十六章:脚本化HTTP
查看>>
EXCEL表中如何让数值变成万元或亿元
查看>>
zabbix性能优化实践
查看>>
一些常用linux命令
查看>>
MySQL的正确备份
查看>>
我的友情链接
查看>>
linux下的CPU平均负载
查看>>
大学生创业计划书(原创)
查看>>
no such file django-admin.py
查看>>
RedHat Enterprise Linux 6.3正式版发布下载
查看>>
server unexpectedly closed network connection
查看>>
性能测试培训总结-Abnormal termination, caused by mdrv process termination
查看>>
我的友情链接
查看>>
tcp/ip各层长度
查看>>