n1=int(input())
List=[]
keys=[]
for i in range(n1):
t=list(map(int,input().split()))
keys.append(t[0])
del t[0]
List+=t
# print(keys)
for i in range(1,len(keys)):
keys[i]=keys[i]+keys[i-1]
Keys=[0]+keys
# print(Keys)
#选择输出
n2=int(input())
for i in range(n2):
x,y=map(int,input().split())
first=set(List[Keys[x-1]:Keys[x]])
second=set(List[Keys[y-1]:Keys[y]])
# print(first)
# print(second)
print('{:.2%}'.format(len(first&second)/len(first|second)))
我们需要的是集合的(交集/并集)不难想象选择python的set,这题的难点自然就落到了数据存储中
这里我利用了切片存储的方法,如下:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 99 87 101 87 101 5 87 99 101 18 5 135 18 99
提取出这些集合为list[0:3],list[3:7],list[7,14]
而这里的[0,3,7,14]这个Keys就是题目所给数量keys=[3,4,7]的和,就是[3,3+4,3+4+7]然后加入一个[0],所以可以得到Keys,然后根据位置x,就可以利用Keys[x-1]:Keys[x]定位到这个集合了
(刚开始发,看到自己的文章能被别人看到很开心,欢迎多多评论))
本文介绍了如何使用Python和切片技术来存储和处理集合数据,以解决计算交集和并集的问题。作者展示了如何利用给定的keys序列确定集合的范围,从而实现高效的数据操作。
927

被折叠的 条评论
为什么被折叠?



