【贪心】【codevs】1214 线段覆盖
2016-03-21 17:34
260 查看
http://codevs.cn/problem/1214/
我去这个题。。。wa的我都没脾气了。。。
我写while(~scanf(“%d”, &n))竟然是不对的。。。
这个程序你妹多次输入是不能结束的????!!!!!!
改成scanf输入一次竟然就对了。。。。整个人都不好了。。。。
就是一个贪心,做法和《今年暑假不AC》是一样的
按照结束时间(线段末尾排序),依次添加不重叠的线段即可
因为已经先按照结束时间排序,结束时间相同的按照开始时间排序,这样选择最早结束的一定不会使结果更糟。例如 1 4 和 1 2, 2 4虽然1 2, 2 4看上去是比1 4度一组但是因为2已经在之前被扫过了所以是不会出现这种情况的。。。
啊本来不用解释的但是因为输入的问题所以生气的再解释一遍!= =
我去这个题。。。wa的我都没脾气了。。。
我写while(~scanf(“%d”, &n))竟然是不对的。。。
这个程序你妹多次输入是不能结束的????!!!!!!
改成scanf输入一次竟然就对了。。。。整个人都不好了。。。。
就是一个贪心,做法和《今年暑假不AC》是一样的
按照结束时间(线段末尾排序),依次添加不重叠的线段即可
因为已经先按照结束时间排序,结束时间相同的按照开始时间排序,这样选择最早结束的一定不会使结果更糟。例如 1 4 和 1 2, 2 4虽然1 2, 2 4看上去是比1 4度一组但是因为2已经在之前被扫过了所以是不会出现这种情况的。。。
啊本来不用解释的但是因为输入的问题所以生气的再解释一遍!= =
#include<bits/stdc++.h> using namespace std; typedef struct line{ int x, y; bool operator < (const line& l) const{ if(y == l.y) return x < l.x; else return y < l.y; } }line; line l[1005]; int main(){ int n; scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%d%d", &l[i].x, &l[i].y); if(l[i].x > l[i].y) swap(l[i].x, l[i].y); } sort(l, l+n); int ans = 0; int tr = -1000; for(int i = 0; i < n; i++){ if(l[i].x >= tr){ tr = l[i].y; ans++; } } printf("%d\n", ans); return 0; }
相关文章推荐
- 单个对象内存管理
- 单个对象内存管理(野指针)
- 内存管理的原则
- 手动进行内存管理
- 内存管理原理和分类
- 内存管理基本概念和范围
- 综合应用:《购票系统》系统优化
- 综合应用:《购票系统》选择座位&支付&出票
- 综合应用:《购票系统》选择排数
- 综合应用:《购票系统》选择影片
- 综合应用:《购票系统》显示正在上映的电影
- 综合应用:《购票系统》系统初始化
- 综合应用:《购票系统》基本框架搭建
- 综合应用:《购票系统》类的设计
- 综合应用:《购票系统》流程分析
- 综合应用:《购票系统》的功能分析
- 综合应用:《购票系统》功能展示
- 综合应用:一个《购票系统》项目需求分析
- 自定义构造方法
- 重写构造方法的应用场景