第一步: 这题看懂题目了就比较好写,我专门写了个函数用来承载一个规律[i,几个,下标,值,下标,值.....] 注意,如果不包含,由于函数特性,会返回一个空字典,所以我加了个判断让他返回NONE
第二步: 排序,sorted 这里有个坑,排序必须要用int,不然sorted排序会出问题,自己试总是不行,我也不知道原因是啥,sorted函数真的好迷 排完了还得继续转换成字符串。
第三步: 循环加到一个临时数组里面。
第四步: 统计临时数组的长度并且用insert加到第一个值里面
最后一步: 打印
代码如下:
``` python []
def cldic(i,lst):#i是条件R<i>,lst为数组
dic={}#定义一个字典,键为序列号,键值为对应值
lstr=[]#定义数组
lstr.append(i)
for j in range(len(lst)):
if i in lst[j]:#转换成字符串的好处,可以用这样的判断
dic[j]=lst[j]#用序列号而不是index解决value值重复问题
lv=len(dic.values())#算出长度
lstr.append(lv)
for k,v in dic.items():#再进一步输出
lstr.append(k)
lstr.append(v)
if lv==0:#lv为0说明字典里面没值,不满组条件R<i>,那么直接返回None。
return None
else:
return lstr
while True:
try:
R=list(map(str,input().split(" ")))#条件1的输入
RN=R[0]#先分离个数
#print(RN)#测试用
RC=R[1:]#RC是所有数组
#print(RC)#测试用
I=list(map(str,input().split(" ")))#条件2的输入
IN=I[0]#同上
IC=I[1:]
IC=sorted(list(map(int,set(IC))))#这个必须的用数字排,不然会坑,记住用map(int,set(IC))
#IC=list(map(str,IC))#也可以用这个转换成str
#print(IC)#测试用
tmp=[]#临时用来装字典的
for i in IC:
tmp.append(cldic(str(i),RC))#排完了还得转换成字符串
#print(tmp)#测试用
tmpz=[]#加载最终结果
for i in tmp:
if i==None:
continue
else:
for j in i:
tmpz.append(str(j))#要用str转换成字符型,便于使用join
#print(tmpz)#测试用,离最终结果就差一个长度了
lentmpz=len(tmpz)
tmpz.insert(0, str(lentmpz))#在前面加上长度,用str转换成字符型,便于使用join
print(" ".join(tmpz))
except:
break