第一步: 这题看懂题目了就比较好写,我专门写了个函数用来承载一个规律[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