已知某序列S=<e1,e2,…,en>,序列中的元素类型为整数(en <= 2^10),序列的长度为可变长度。
现在有若干序列S1,S2,…,Sn,现在要求设计一种算法,找出这些重复的序列。输出重复序列的序号,如果有多组重复,需全部输出。
所有序列中的数字个数加起来,小于1000000,序列个数小于10000个。
例如现有3个序列
S1=<65,43,177,655>
S2=<1,2,3,4,5,6,7>
S3=<65,43,177,655,3>
这时序列无重复。又如
S1=<65,43,177,655,3>
S2=<1,2,3,4,5,6,7>
S3=<65,43,177,655,3>
这时序列有重复。
输入描述:
第一行为一个正整数N,N>=1且N<10000
接下来为2*N数据,每两行表示一个序列,序列的第一行为序列长度L,第二行为序列的数字,一共L个
输出描述:
重复序列的序号,每一行X个数字,表示一组相同的序列,这一组相同序列共有X个,输出这X个序列的序号
输入
11
10
794 472 991 500 615 872 518 827 673 203
1
427
7
367 718 202 187 683 321 831
10
1023 78 310 816 158 500 518 705 553 470
8
205 190 306 492 166 49 791 961
6
665 211 1009 614 15 683
2
195 946
3
678 198 495
8
205 190 306 492 166 49 791 961
5
83 74 1023 453 692
2
176 157
输出
4 8
N=int(input())
tmp=[]
dic={}
alist=[[] for i in range(N)]
for i in range(N):
L=int(input())
tmp.append(tuple(map(int,input().split())))
for i in range(len(tmp)):
if tmp[i] not in dic:
dic[tmp[i]]=i
else:
if dic[tmp[i]] not in alist[dic[tmp[i]]]:
alist[dic[tmp[i]]].append(dic[tmp[i]])
alist[dic[tmp[i]]].append(i)
# print(dic)
# print(alist)
if alist==[[] for i in range(N)]:
print('no')
else:
for i in alist:
if i!=[]:
t=[str(j) for j in i]
p=' '.join(t)
print(p)
本文介绍了一种用于在大量可变长度整数序列中查找重复序列的算法。算法通过将序列转换为元组并使用字典进行存储,实现快速查找重复序列,并输出重复序列的序号。
812

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



