博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【20171111】 Codevs 1214 线段覆盖
阅读量:5285 次
发布时间:2019-06-14

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

题目描述 
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

我想,如果把覆盖关系转化为“边”的话,那么输入数据可以转化为一个图,

题目就变为:删掉最少的点,使得图中剩余点两两不能连通。

好简单呀,就按照每个点的度降序删点即可!

但是我的代码速度有待提高……

数组存图,n^2,

1 //begin at 16:40 2 #include
3 #include
4 #define maxn 101 5 #define _Cover !(ival[i][0]>=ival[j][1]||ival[i][1]<=ival[j][0]) 6 int ival[maxn][3];//interval 7 //ival[i][2] is the amount of 'i' Coverd intervals 8 int g[maxn][maxn];//regard the cover 9 int countCover=0;10 int n;11 int searchMaxCover()12 {13 int ans=0,i,maxi;14 for(i=0;i
ans)17 {18 maxi=i;19 ans=ival[i][2];20 }21 }22 return maxi;23 }24 int main()25 {26 scanf("%d",&n);27 int i,j,t;28 for(i=0;i
ival[i][1])32 {33 t=ival[i][0];ival[i][0]=ival[i][1];ival[i][1]=t;34 }35 ival[i][2]=0;//the amount of Coverd intervals36 for(j=0;j
0)57 {58 i++;59 p=searchMaxCover();60 for(j=0;j

 

转载于:https://www.cnblogs.com/CXSheng/p/7819607.html

你可能感兴趣的文章
OMG: daily scrum nine
查看>>
redis与spring结合错误情况
查看>>
第六章 字节码执行方式--解释执行和JIT
查看>>
字符串方法title()、istitle()
查看>>
yield语句
查看>>
查看linux系统中占用cpu最高的语句
查看>>
[洛谷P1738]洛谷的文件夹
查看>>
ubuntu server设置时区和更新时间
查看>>
【京东咚咚架构演进】-- 好文收藏
查看>>
【HTML】网页中如何让DIV在网页滚动到特定位置时出现
查看>>
文件序列化
查看>>
jQuery之end()和pushStack()
查看>>
Bootstrap--响应式导航条布局
查看>>
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
HDU 1021 一道水题
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>