输入:
15 123 456 786 453 46 7 5 3 665 453456 745 456 786 453 123 5 6 3 6 3 0
输出:
30 3 6 0 123 3 453 7 3 9 453456 13 453 14 123 6 7 1 456 2 786 4 46 8 665 9 453456 11 456 12 786
说明:
将序列R:5,6,3,6,3,0(第一个5表明后续有5个整数)排序去重后,可得0,3,6。 序列I没有包含0的元素。 序列I中包含3的元素有:I[0]的值为123、I[3]的值为453、I[7]的值为3、I[9]的值为453456、I[13]的值为453、I[14]的值为123。 序列I中包含6的元素有:I[1]的值为456、I[2]的值为786、I[4]的值为46、I[8]的值为665、I[9]的值为453456、I[11]的值为456、I[12]的值为786。 最后按题目要求的格式进行输出即可。答案与解析
from collections import defaultdict
I = input().split()[1:]
R = input().split()[1:]
#要先改格式不然会按字符串排序规则排序,比如说排成[16,26,4]
R = [int(x) for x in R]
r=sorted(list(set((R))),reverse=False)
#再改回来,因为后面按字符串规则查找对应片段
R = [str(x) for x in r]
#用这个函数可以自定义一个值为列表的字典
a = defaultdict(list)
n=0#初始值
for i in range(len(R)):
for j in range(len(I)):
if len(R[i])>len(I[j]):
continue
else:
for k in range(len(I[j])):
if I[j][k:k+len(R[i])]==R[i]:
if j not in a[R[i]]:
a[R[i]].append(j)
#以配对成功的r[i]为键,
# 向它的值列表中添加I中对应索引号;
#这里算的是R[i]的个数和用于表示与R[i]匹配成功的I数量的数字
# (比如说题目的输出中的首个6)
n += 2*(len(a))
for i in range(len(a)):
b = 2*(len(a[list(a.keys())[i]]))
n += b
print(n,end=' ')
for i in range(len(a)):
print(list(a.keys())[i],end=' ')
print(len(a[list(a.keys())[i]]),end=' ')
for j in a[list(a.keys())[i]]:
print(j,end=' ')
print(I[j],end=' ')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)