ZOJ-3953 Intervals,t
来源:互联网 发布:linux echo 编辑:程序博客网 时间:2024/05/16 13:41
Intervals
题意:给出n个区间,求最少删除多少个区间使得任意三个区间都不相交。
思路:按区间左端点排序,每次选取r最大的两个与当前比较,如果能放更新r,否则删除r最大的。关键就在怎么删除r最大的,我们可以再定义一个排序数组,按r排序即可,然后比较。
struct node{ int l,r,id;} v[5],a[N];int b[N];bool cmp(node x,node y){ if(x.l==y.l) return x.r<y.r; return x.l<y.l;}bool cmp2(node a,node b){ return a.r>b.r;}bool judge(node i,node j,node k){ int f=0; if(i.r>=j.l&&i.r>=k.l) f++; if(j.r>=k.l) f++; return f==2;}int main(){ int t,n; scanf("%d",&t); while(t--) { memset(b,0,sizeof(b)); scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d%d",&a[i].l,&a[i].r),a[i].id=i; sort(a+1,a+n+1,cmp); v[0]=a[1],v[1]=a[2]; int len=0; for(int i=3; i<=n; i++) { v[2]=a[i]; sort(v,v+3,cmp); int f=judge(v[0],v[1],v[2]); sort(v,v+3,cmp2); if(f)//相交 { b[len++]=v[0].id; swap(v[0],v[2]);//删除r最大的; } } sort(b,b+len); printf("%d\n",len); for(int i=0; i<len; i++) printf("%d ",b[i]); printf("\n"); } return 0;}
0 0
- ZOJ-3953 Intervals,t
- ZOJ-3953-Intervals 贪心
- ZOJ 3953 Intervals
- ZOJ 3953 Intervals
- ZOJ 3953 Intervals (贪心)
- ZOJ 3953 Intervals(区间贪心)
- 浙大17年校赛(ZOJ 3953) Intervals[贪心]
- ZOJ 3953 Intervals (贪心/区间交)
- ZOJ 2029 The Intervals
- ZOJ 2029 The Intervals
- zoj 1508 Intervals
- zoj 1508 Intervals
- ZOJ-1508 Intervals
- ZOJ-3953-Intervals【贪心】【17th浙大校赛】
- zoj 1309 || poj 1375 Intervals
- zoj 1508 | poj 1201 Intervals
- zoj 1508 && poj 1201 Intervals
- zoj 1508 Intervals 差分约束系统
- 二叉树的路径和
- 关于汉化版adobe after effects cs6 中:“afterEffects警告:未知工作区”和“浮动窗口恢复”的讲解
- Android--ContentProvider小demo
- C++数组指针和指针数组
- 【洛谷】3381 【模板】最小费用最大流
- ZOJ-3953 Intervals,t
- 初始封装
- 数学 找规律HDU-1030
- 遍历文件夹内的所有文件
- IBM Lotus Domino Designer 下载安装记录
- QT6
- MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
- C++创建类
- C语言实现循环队列