这是一道排序类算法题,核心是根据“商品包含用户关键词的数量”对商品排序,以下是解题思路和代码实现:

解题思路

  1. 解析输入
    • 读取商品数量n和用户关键词数量q
    • 读取用户关键词列表(用集合存储,方便快速判断);
    • 读取每个商品的名称和关键词列表,计算该商品包含的用户关键词数量。
  2. 排序规则
    • 按“包含用户关键词的数量”降序排列;
    • 数量相同时,按输入顺序(原顺序)排列。
  3. 输出结果:按排序后的顺序输出商品名称。

代码实现(Python)

n, q = map(int, input().split())
# 读取第二行的q个搜索关键词
search_set = set(input().split())
# 存储商品信息(匹配数、原始索引、商品名)
goods = []

for idx in range(n):
    # 读取商品名和属性数量
    name_m = input().split()
    name = name_m[0]
    m_i = int(name_m[1])
    # 读取该商品的m_i个属性(如果m_i>0)
    attrs = []
    if m_i > 0:
        attrs = input().split()
    # 计算匹配的关键词数量
    match_cnt = 0
    for attr in attrs:
        if attr in search_set:
            match_cnt += 1
    # 负号用于升序排序实现匹配数降序,原始索引保证同分数时按输入顺序
    goods.append((-match_cnt, idx, name))

# 排序:先按匹配数降序,再按原始输入顺序升序
goods.sort()
# 输出结果
for item in goods:
    print(item[2])