整数区间【问题描述】
我们定义一个整数区间[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 0
j = 0
for 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