51nod 1091 线段的重叠
2016-11-11 21:28
197 查看
题目链接:传送门
是不重叠线段简单版,这个只用对开始的端点进行大小排序,每次记录最后面的端点的位置r
如果当前的线段的右端点小于r,则这个线段被另一个大的线段包住,否则则要算到这个线段的左端点到这个r,计算长度并且更新r就行了
代码如下:
是不重叠线段简单版,这个只用对开始的端点进行大小排序,每次记录最后面的端点的位置r
如果当前的线段的右端点小于r,则这个线段被另一个大的线段包住,否则则要算到这个线段的左端点到这个r,计算长度并且更新r就行了
代码如下:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N 50010 struct rng{ int s,e; }t ; bool cmp(rng a,rng b){ if(a.s<b.s) return 1; if(a.s==b.s&&a.e<=b.e) return 1; return 0; } int main(){ int i,j,n,m,k; while(scanf("%d",&n)!=EOF){ for(i=1;i<=n;i++) cin>>t[i].s>>t[i].e; sort(t+1,t+1+n,cmp); int r=t[1].e; int res=0; // for(i=1;i<=n;i++) cout<<t[i].s<<t[i].e<<endl; for(i=2;i<=n;i++){ if(t[i].s>=r){ r=t[i].e; continue; } if(t[i].e>=r){ int x=r-t[i].s; if(x>res) res=x; r=t[i].e; continue; } if(t[i].e<=r){ int x=t[i].e-t[i].s; if(x>res) res=x; continue; } } cout<<res<<endl; } return 0; }
相关文章推荐
- 51nod——1091 线段的重叠(排序,贪心)
- 51NOD-1091-线段的重叠
- 51Nod 1091 线段的重叠(贪心+区间相关,板子题)
- 51nod 1091 线段的重叠
- 51nod 1091 线段的重叠
- 51nod 1091 线段的重叠
- 51Nod 1091 线段的重叠 (区间贪心
- 51Nod-1091 线段的重叠
- [51nod] 1091 线段的重叠 贪心
- 51Nod 1091 线段的重叠
- 51nod 1091 线段的重叠
- 51nod 1091 线段的重叠 (贪心)
- 51nod 1091 线段的重叠 分类: 51nod 2015-07-18 21:49 7人阅读
- 51nod 1091 线段重叠
- 51nod 1091 线段的重叠(贪心)
- 51Nod 1091 线段的重叠
- 51Nod 1091 线段重叠 | 贪心
- 51nod 1091 线段的重叠 贪心入门- -
- 51Nod-1091-线段的重叠
- 51nod 1091 线段的重叠(贪心)