1214 线段覆盖 非结构体做法
2018-06-17 23:04:07来源:未知 阅读 ()
1214 线段覆盖
给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数。有些线段之间会相互交叠或覆盖。请你编写一个程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共点。所谓的内部公共点是指一个点同时属于两条线段且至少在其中一条线段的内部(即除去端点的部分)。
输入第一行是一个整数N。接下来有N行,每行有二个空格隔开的整数,表示一条线段的二个端点的坐标。
输出第一行是一个整数表示最多剩下的线段数。
3
6 3
1 3
2 5
2
贪心解法:首先将线段端点调整为左端点小于(或等于)右端点;第二,根据右端点将线段从小到大排序;第三,扫描一遍,每次遇到的第一个与当前的max不想交的即为最优选择。
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int a[10001]; 5 int b[10001]; 6 int main() 7 { 8 int n; 9 cin>>n; 10 for(int i=1;i<=n;i++) 11 { 12 cin>>a[i]>>b[i]; 13 a[i]=a[i]+300; 14 b[i]=b[i]+300; 15 if(a[i]>b[i])swap(a[i],b[i]); 16 } 17 for(int i=1;i<=n;i++) 18 { 19 for(int j=1;j<n;j++) 20 { 21 if(b[j]>b[j+1]) 22 { 23 swap(b[j],b[j+1]); 24 swap(a[j],a[j+1]); 25 } 26 } 27 28 } 29 int ans=0; 30 int maxn=-1; 31 for(int i=1;i<=n;i++) 32 { 33 if(a[i]>=maxn) 34 { 35 ans++; 36 maxn=b[i]; 37 } 38 } 39 cout<<ans; 40 return 0; 41 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:军事机密(Secret.pas)
下一篇:1164 统计数字
- 【数据结构】树套树——线段树套平衡树 2020-04-18
- 线段树学习资料 2020-03-19
- 洛谷P1034 矩形覆盖 2020-03-10
- 排兵布阵 2020-02-21
- 线段树 2019-11-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash