这是一道排序类算法题,核心是根据“商品包含用户关键词的数量”对商品排序,以下是解题思路和代码实现:
解题思路
- 解析输入:
- 读取商品数量
n和用户关键词数量q; - 读取用户关键词列表(用集合存储,方便快速判断);
- 读取每个商品的名称和关键词列表,计算该商品包含的用户关键词数量。
- 读取商品数量
- 排序规则:
- 按“包含用户关键词的数量”降序排列;
- 数量相同时,按输入顺序(原顺序)排列。
- 输出结果:按排序后的顺序输出商品名称。
代码实现(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])



京公网安备 11010502036488号