二分贪心 V 公共区间最少元素
来源:互联网 发布:hp5200网络打印机驱动 编辑:程序博客网 时间:2024/06/05 01:58
1、简单描述
给出n个连续区间,区间元素只包含整数,在数轴上任取一些元素构成集合A,使所给出的每个区间都至少有两个元素与该区间中元素相同,A中至少有多少元素?
2、思路
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
int l,r;
} a[10001];
bool cmp(node A,node B)
{
if(A.r!=B.r)
return A.r<B.r;
else return A.l>B.l;
}
int main()
{
int i,n,t,t1,t2;
while(cin>>n)
{
memset(a,0,sizeof(a));
for(i=0; i<n; i++)
{
cin>>a[i].l>>a[i].r;
}
sort(a,a+n,cmp);
int s=2,t1=a[0].r,t2=a[0].r-1;
for(i=1;i<n;i++)
{
if(t2>=a[i].l)
continue;
else if(t2<a[i].l&&t1>=a[i].l)
{
t2=a[i].r;
s++;
}
else if(t2<a[i].l&&t1<a[i].l)
{
t1=a[i].r;
t2=a[i].r-1;
s+=2;
}
if(t1<t2)
{
t=t1;
t1=t2;
t2=t;
}
}
cout<<s<<endl;
}
return 0;
}
贪心。
先对所有区间按末端点排序
取第i个区间的最后两个元素1和2
若第i+1个区间包含了这两个元素,则跳到下一个区间所取的元素个数+0
若第i+1个区间只包含了这两个元素中的一个,已经进行排序,一定包含元素2,则取第i+1个区间的最后一个元素,所取的元素个数+1。为了方便下一区间的比较,更新1和2的值,使他们为当前A集合中最后的两个元素。
若第i+1个区间没有包含这两个元素,则第i+1个区间的最后两个元素,所取的元素个数+2。为了方便下一区间的比较,更新1和2的值,使他们为当前A集合中最后的两个元素。
1初始化为第一个区间的倒数第2个元素
2初始化为第一个区间的最后的元素
所取的元素个数初始化为2 (就是Selem和Eelem)
- 二分贪心 V 公共区间最少元素
- 二分贪心—V
- POJ 2376 Cleaning Shifts (贪心区间最少覆盖)
- POJ 1328 Radar Installation 贪心最少区间问题
- 最少区间
- 51nod 1128 正整数分组 V 二分+贪心
- tyvj 4757 Cleaning 用最少的线段覆盖全区间 贪心 小优化
- POJ 1328 Radar Installation(贪心——最少区间选点覆盖)
- POJ 2437 Muddy Roads(贪心 最少固长线段覆盖区间)
- 二分贪心练习--T(用最少的箱子放所有的货物)
- 区间贪心
- 区间贪心
- 最少拦截系统-贪心
- 最少拦截系统 贪心
- 贪心--最少拦截系统
- 二分+贪心
- 贪心 + 二分
- 贪心二分
- Android中实现波浪球效果
- 1016: 委派任务*
- Java内存分配全面浅析
- 三层架构概念
- springMVC 中几种获取request和response的方式
- 二分贪心 V 公共区间最少元素
- 移动端web适配
- 1017: 字符串正反连接
- LeNet网络模型各层及参数解读
- QT的pro文件编写
- LeetCode 125. Valid Palindrome 对撞指针(双索引)
- 问题8.3.3 巨人与鬼 UVa 1411 Ants(分治)
- mysql导入*.sql文件时报错: 2006
- Climbing Stairs