WIKIOI-1214 线段覆盖
来源:互联网 发布:淘宝基础店铺装修 编辑:程序博客网 时间:2024/05/05 10:38
题目描述 Description
给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数。有些线段之间会相互交叠或覆盖。请你编写一个程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共点。所谓的内部公共点是指一个点同时属于两条线段且至少在其中一条线段的内部(即除去端点的部分)。
输入描述 Input Description
输入第一行是一个整数N。接下来有N行,每行有二个空格隔开的整数,表示一条线段的二个端点的坐标。
输出描述 Output Description
输出第一行是一个整数表示最多剩下的线段数。
样例输入 Sample Input
3
6 3
1 3
2 5
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
0<N<100
//贪心算法 #include<stdio.h>#include<algorithm>using namespace std;struct node { int a,b;}p[200];int swap(int &a,int &b)//交换a和b的值 { int t; t=a; a=b; b=t;}int cmp(node x,node y){ if(x.b!=y.b) return x.b<y.b;//只能按照右端点从小到大排序(防止有多个右端点相同但左端点不同的) }int main(){ int i,j,n,end,flag,sum; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d %d",&p[i].a,&p[i].b); if(p[i].a>p[i].b)//必须要满足前小后大,不满足就交换 swap(p[i].a,p[i].b); } sort(p,p+n,cmp);//按b从小到大排序 flag=0;//先拿第一个的与后面的比较,一旦发现没有公共点的,更新flag(每次让下一个数左端点的比较flag所在的右端点) sum=1; for(i=1;i<n;i++) { if(p[i].a<p[flag].b)//去掉有公共点的 (只要左端点大于等于现在的端点就满足!) continue; flag=i;//更新剩下的端点 sum++; } printf("%d\n",sum); return 0;}
0 0
- wikioi 1214 线段覆盖
- WIKIOI-1214 线段覆盖
- wikioi 1214 线段覆盖
- wikioi 1214 线段覆盖
- wikioi 1214 线段覆盖
- wikioi天梯之1214 线段覆盖 贪心
- wikioi p1214 线段覆盖
- wikioi线段覆盖
- wikioi p3027 线段覆盖 2
- wikioi p3037 线段覆盖 5
- wikioi 3027 线段覆盖 2
- wikioi 3027 线段覆盖 2
- wikioi 3027 线段覆盖2
- wikioi-天梯-普及一等-贪心-1214:线段覆盖
- wikioi-天梯-普及一等-序列dp-3027:线段覆盖 2
- 1214 线段覆盖
- codevs 1214 线段覆盖
- 1214 线段覆盖
- NSMutableArray的一些用法
- RTB
- 测量电阻遇到的问题
- Unit2--problem2学号成绩搞运动
- C++非模态对话框自动销毁的好方法
- WIKIOI-1214 线段覆盖
- xcode5向APP store上传应用的时候注意点
- FragmentTest学习笔记1
- hdu2660 Accepted Necklace 二维背包
- 冒泡排序
- 【优先队列】STL之优先队列的使用方法
- FragmentTest学习笔记2
- 黑马程序员_文档注释
- Ubuntu12.04下禁止U盘等设备自动挂载和打开