贪心,整数区间
来源:互联网 发布:python语言介绍 编辑:程序博客网 时间:2024/05/16 12:27
整数区间【问题描述】
我们定义一个整数区间[a,b]:是一个从a开始至b 结束的连续整数的集合。编一个程序,对给定的 n个区间,找出满足下述条件的所含元素个数最少的集合中元素的个数:对于所给定的每一个区间,都至少有两个不同的整数属于该集合。(1≤n≤1000,
0≤a≤b≤1000)
【输入格式】
第一行一个正整数n,接下来有n行,每行给定一个区间的a,b值。
【输出格式】
一个正整数,即满足条件的集合所包含的最少元素个数。
【样例】
输入:
4
3 6
2 4
0 2
4 7
输出:
4
三
我们定义一个整数区间[a,b]:是一个从a开始至b 结束的连续整数的集合。编一个程序,对给定的 n个区间,找出满足下述条件的所含元素个数最少的集合中元素的个数:对于所给定的每一个区间,都至少有两个不同的整数属于该集合。(1≤n≤1000,
0≤a≤b≤1000)
【输入格式】
第一行一个正整数n,接下来有n行,每行给定一个区间的a,b值。
【输出格式】
一个正整数,即满足条件的集合所包含的最少元素个数。
【样例】
输入:
4
3 6
2 4
0 2
4 7
输出:
4
==========================================================================
题目讲解什么的:
首先题目的意思:
找出一个区间满足下列条件:
1包含输入的区间中至少两个整数。
2所含元素最少。
输出所求区间的元素数。
然后手工怎么找出呢
以例子为讲解的例子
3 6
2 4
0 2
4 7
我们在纸上这样吧它们列出来:
a$$$$$$3 4 5 6
b$$$$2 3 4
c0 1 2
d$$$$$$$$4 5 6 7
对于1,2,3,4,5,6,7(设为all_range)一定是符合条件1的,但是不合条件2,所以对all_range进行删除,删除0,all_range满足abcd,删除1,不满足c,所以1不可删,依次列推,可以得出最后的列表结果是[1,2,4,6]
因此答案是4
==========================代码实现什么的=============================================
一:
n = input("n=?")input_list = []for i in range(1,n + 1): input_list.append(raw_input("a,b=?"))#n = 4#input_list = ["3 6","2 4","0 2","4 7"]input_list = [(int(i.split(" ")[0]),int(i.split(" ")[1])) for i in input_list]a_list = [i[0] for i in input_list]b_list = [i[1] for i in input_list]all_range = range(min(a_list),max(b_list) + 1)def judge(j_list,result_list): j = 0 for i in j_list: if i in result_list: j += 1 if j>=2: return 1 else: return 0j = 0for i in range(0 , len(all_range)): i = all_range[j] all_range.remove(i) for k in input_list: if judge(range(k[0],k[1]+1),all_range) != 1: all_range.append(i)print len(all_range)
二
def fuck(l,judge = lambda j_list,result_list:len([i for i in j_list if i in result_list])>=2): all_range = range(min([i[0] for i in l]),max([i[1] for i in l])) for i in range(0,len(all_range)): del all_range[0] for k in l: if judge(range(k[0],k[1]+1),all_range) != 1: all_range.append(i) return len(all_range)print (lambda n:(lambda l:fuck(l))([map(lambda i:int(i),raw_input("a,b=?").split(" ")) for i in range(n)]))(input("n=?"))
三
f = lambda L: (lambda t: (([([not filter(t[1:].__contains__, range(j, k+1))[1:] and t.append(t[0]) for j, k in L], t.pop(0)) for i in range(len(t))], len(t))[1]))((range(min(L)[0], max([i[1] for i in L]))))print f([[3, 6], [2, 4], [0, 2], [4, 7]])#by April4
- 贪心,整数区间
- 贪心算法----整数区间
- 整数区间(贪心)
- 贪心算法-整数区间-JAVA
- poj 1716 贪心(整数区间:2-覆盖)
- 区间贪心
- 区间贪心
- 整数区间
- 整数区间
- 整数区间
- 整数、区间与区间端点
- 贪心算法-区间选点
- 贪心之区间覆盖
- 贪心之区间选点
- HDU1050-贪心-区间重叠
- 贪心区间覆盖--poj2378
- poj_1328_Radar Installation(区间贪心)
- 区间选点问题【贪心】
- c++图书编号与价格 链表的创建及显示
- hdu 4502 dp小水题
- 百度贴吧里如何留网址
- Spring 3.x jar 包详解 与 依赖关系
- UNIX环境高级编程——标准I/O库
- 贪心,整数区间
- Ogre1.8.1射线实现碰撞检测例子源代码
- “cout”: 未声明的标识符”是怎么回事?
- MySQL int(4)类型的值范围是多少呢?
- 遍历INI文件和删除指定域内容
- 如何阻止 iframe里引用的网页自动跳转--
- Codeforces #191(Div.2)-A. Flipping Game
- 华仪智能 嵌入式软件笔试题 (回忆版)
- 单调队列之最大最小成员