51 NOD 1091 线段的重叠
来源:互联网 发布:手机ai软件下载 编辑:程序博客网 时间:2024/06/06 13:07
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1091
1091 线段的重叠
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
收藏
关注
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
解析: 求最长重叠线段的长度,这就要用到贪心思想,一直贪心选择最优的,先排下序(起点升序,终点降序),使一直取最大区间的去更新
重叠长度即可
具体代码如下:
#include<bits/stdc++.h>#define N 50009using namespace std;struct node{ int x, y;}p[N];bool cmp(node a, node b){ return a.x == b.x ? (a.y > b.y) : (a.x < b.x);}int main(){ int i, n; scanf("%d", &n); for(i = 1; i <= n; i++) scanf("%d%d", &p[i].x, &p[i].y); sort(p + 1, p + n + 1, cmp); int ans = 0, id = 1; for(i = 2; i <= n; i++) { ans = max(ans, min(p[i].y - p[i].x, p[id].y - p[i].x)); id = p[id].y > p[i].y ? id : i; } printf("%d\n", ans); return 0;}
0 1
- 51nod-1091 . 线段的重叠
- 51nod 1091 线段的重叠(贪心)
- 51nod 1091 线段的重叠
- 51nod 1091 线段的重叠
- 51nod 1091 线段的重叠 贪心
- 51nod 1091 线段的重叠
- 51nod 1091 线段的重叠 贪心
- 贪心-51nod 1091 线段的重叠
- 51nod-【1091 线段的重叠】
- 51nod 1091 线段的重叠
- 51nod 1091 线段的重叠
- 51nod 1091 线段的重叠
- 51 NOD 1091 线段的重叠
- 51Nod 1091 线段的重叠
- 51 nod 1091 线段的重叠
- 51Nod-1091 线段的重叠【排序】
- 51Nod 1091 线段的重叠
- 51nod 1091 线段的重叠
- ARM之时钟体系
- hdu 线段树 (矩形面积并+离散化+二分查找)
- 细说vue的过渡动画
- View分发机制
- (转)量化策略:Ricequant迎新年50篇干货分享
- 51 NOD 1091 线段的重叠
- OpenJudge 2989 糖果
- CodeForces 444C - DZY Loves Colors(线段树)
- 树状数组(3)
- ORACLE中使用RAMA删除部分日志
- Codeforces 451D - Count Good Substrings(组合数学)
- hdu 2089 不要62 (数位dp入门)
- 烂泥:VMWare Workation双网卡配置IP地址
- View滑动冲突