|
发表于 2020-4-9 17:02:31
|
显示全部楼层
本帖最后由 阴阳神万物主 于 2020-4-9 17:23 编辑
难度评级:简单
要素分析:数论
随机输入生成器,送给有需要的人:
- import random
- def gent(a:'区间下限'=1,b:'区间上限'=10,l:'列表长度上限'=4,n:'生成数量'=10):
- for i in range(n):
- yield [[(l := random.randint(a,b-1)),random.randint(l+1,b)]for j in range(0,l+1)]
复制代码
解题代码:
- def solve(intervals:list,how:'是否打印最小集合'=False):
- sets = [set(range(i[0],i[1]+1))for i in intervals]
- u = set()
- while sets:
- n = []
- l = len(sets)
- flg = [True]*l
- for a in range(l-1):
- for b in range(a+1,l):
- c = sets[a].intersection(sets[b])
- if len(c)>=2:
- if c not in n:n.append(c)
- flg[a],flg[b] = False,False
- if flg[a]:n.append(sets[a])
- if flg[-1]:n.append(sets[-1])
- if n == sets:
- for each in sets:
- u = u.union({each.pop(),each.pop()})
- break
- sets = n
- if how:print(u)
- return len(u)
- if __name__ == '__main__':
- print('示例1 输出:',solve([[1, 3], [1, 4], [2, 5], [3, 5]]))
- print('示例2 输出:',solve([[1, 2], [2, 3], [2, 4], [4, 5]]))
复制代码
|
评分
-
查看全部评分
|