重复最长的两个线段
来源:互联网 发布:学好高中数学的软件 编辑:程序博客网 时间:2024/05/18 01:58
题目:
分析:
思路:先排序,后贪心
设输入线段的数组为A[0..n-1],每条线段为(x, y)
(1)首先将A排序(先按x排,如果x相等,则按y排)
(2)令opt(i) 表示a[i]与a[j]相交的最大长度(其中i < j < n)
令a[k]表示a[i+1], a[i+2], a[i+3], .., a[n-1]中第一条不完全被a[i]覆盖的线段 (a[k].y >= a[i].y)
那么,必有
(a) opt[i] = max(intersection_len(a[i], a[j])), 其中i<j<=k
(b)对任意 i<p<k, opt[p] <= opt[i]
(b)对任意 i<p<k, opt[p] <= opt[i]
(3)要求的值为max(opt[i]), 0 =< i < n
#include<stdio.h>typedef struct _line{ int x; int y;}Line;int cmp(const void* a, const void* b){ Line* l1 = (Line*)a; Line* l2 = (Line*)b; if(l1->x != l2->x) return l1->x - l2->x; return l1->y - l2->y;}int inter_sect(const Line* a, const Line* b){ int x = a->x; if(b->x > x) x = b->x; int y = a->y; if(b->y < y) y = b->y; return y - x;}int main(){ int n; Line a[10000]; scanf("%d", &n); int i, j; for(i = 0; i < n; i++) scanf("%d %d", &a[i].x, &a[i].y); qsort(a, n, sizeof(a[0]), cmp); int mark1, mark2, max = -1; for(i = 0; i < n; ) { int local_max = 0, local_index; for(j = i + 1; j < n; j++) { int t = inter_sect(a + i, a + j); if(t > local_max) { local_max = t; local_index = j; } if(a[j].y >= a[i].y) break; } if(local_max > max) { max = local_max; mark1 = i; mark2 = local_index; } i = j; } printf("max intersction: (%d, %d), (%d, %d)\n", a[mark1].x, a[mark1].y, a[mark2].x, a[mark2].y); return 0;}
- 重复最长的两个线段
- 转载:一个一维数轴上有不同的线段,求重复最长的两个线段
- 重复子串问题(四):求两个字符串的最长公共字串
- 长度最长的重复字符串
- POJ 3261 - Milk Patterns 求指定重复次数的最长子串,后缀数组+二分 or 线段树
- 利用后缀数组求字符串的最长重复子串的算法 利用二维数组求两个字符串的最长公共字串(动态规划)
- 找出重合长度最长的线段
- 最长无重复字符的子串
- 没有重复字符的最长子串
- 求最长重复子串的长度
- 求字符串的最长重复子串
- 求字符串的最长不重复字串
- 求字符串的最长重复子串
- 字符串中重复出现的最长字串
- 求字符串的最长重复子串
- 最长可重叠的重复子串
- 237 找出最长的重复子串
- 求字符串的最长不重复字串
- Lock wait timeout exceeded; 磁盘满,导致。
- nagios全攻略(二)----基本安装和配置(下)
- Bigcommerce产品分类:给重复的CategoryName链接添加rel="nofllow"标记
- Error:The type or namespace name 'Office' does not exist in the namespace 'Microsoft' 解决方法
- 黑龙江集贤塌楼事件仍有4人被困-集贤-黑龙江-办公楼
- 重复最长的两个线段
- 软件设计原则
- 【模拟】分数化小数
- 【转】在二元树中找出和为某一值的所有路径
- 简述HTTP网络协议工作原理的流程
- vsftpd服务器的安装与详解
- boost源码剖析之:多重回调机制signal(上)
- 常见的数组问题
- js控制表单不能输入空格