博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1025
阅读量:4597 次
发布时间:2019-06-09

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

地址:

题意:上面n个点,下面n个点,然后在这2n个点之间随意连线,一个点只能被连一次,问最多有多少条线不交叉。

mark:把上面点排序后,那么就转换成最大升序子序列的问题了。可以看看我上一篇博客~poj 3903

代码:

#include 
#include
#include
typedef struct{ int s,e;}city;city c[500010];int len;int d[500010];int cmp(const void *a, const void *b){ return (*(city *)a).s - (*(city *)b).s;}int find(int m){ int fr = 0, la = len-1, mid; while(fr <= la) { mid = (fr+la)/2; if(d[mid] == m) return 0; if(d[mid] > m) la = mid-1; else fr = mid+1; } return fr;}int main(){ int n,m; int i,j; j = 1; while(~scanf("%d", &n)) { len = 0; for(i = 0; i < n; i++) scanf("%d %d", &c[i].s, &c[i].e); qsort(c, n, sizeof(c[0]), cmp); for(i = 0; i < n; i++) { if(!len) {d[len++] = c[i].e; continue;} if(c[i].e < d[0]) {d[0] = c[i].e; continue;} if(c[i].e > d[len-1]) {d[len++] = c[i].e; continue;} m = find(c[i].e); if(m) d[m] = c[i].e; } printf("Case %d:\nMy king, at most %d road", j++, len); if(len-1) putchar('s'); puts(" can be built.\n"); } return 0;}

转载于:https://www.cnblogs.com/andre0506/archive/2012/07/25/2608444.html

你可能感兴趣的文章
高可用数据采集平台(如何玩转3门语言php+.net+aauto)
查看>>
201521123017 《Java程序设计》第2周学习总结
查看>>
Linux curl命令详解
查看>>
charles
查看>>
如何查看包名
查看>>
ffmpeg常用参数一览表
查看>>
Java实现文件拷贝的4种方法.
查看>>
一元四次方程求根公式
查看>>
private,protected,public和internal的区别
查看>>
LA3029 City Game
查看>>
第一次作业
查看>>
Kinect控制PowerPoint播放
查看>>
Unix Notes.
查看>>
Java基础复习3
查看>>
iCOM组件(iComponent,应用或学习组件)
查看>>
css实现页面文字不换行、自动换行、强制换行
查看>>
web前端切图处理
查看>>
win10 系统右键菜单不显示文字(只有小图标)修复方法
查看>>
PAT A1009 Product of Polynomials (25 分)——浮点,结构体数组
查看>>
Xen虚拟机克隆实战
查看>>