这道题目的核心思想是根据用户浏览过的标签,对图书进行排序,使得匹配度更高的图书排在前面。
具体解题步骤如下:
k 中,方便快速判断一个标签是否被用户浏览过。c(匹配度)。将 c 和图书编号 i 作为一个二元组 {c, i} 存储在 res 中。res 按照自定义的比较函数进行排序,优先按照 c 值降序排列,如果 c 值相同,则按照编号升序排列(即保持输入顺序)。图书馆新到一批图书,每本书都有若干描述其内容的标签。为了让用户更快找到感兴趣的书,管理员准备根据用户最近浏览过的标签,对图书进行匹配度排序。具体来说,给定每本书的标签集合,以及用户近期浏览过的一组标签,请你统计每本书的标签中属于用户浏览标签的个数,作为该书的“匹配度”。最后将图书按匹配度从高到低输出;如果两本书的匹配度相同,则保持它们输入时的先后顺序。
约束条件:图书数量 n 和用户浏览的标签数量 q 均不超过 3×104;所有图书的标签总数不超过 3×104;所有标签和书名均为仅由小写字母组成的字符串,长度不超过 20。
第一行包含两个整数 n 和 q(1≤n,q<30000),分别表示图书数量与用户浏览的标签数量。 第二行包含 q 个互不相同、仅由小写字母组成的字符串,表示用户浏览过的标签,相邻字符串间以空格分隔。 接下来每两行描述一本书:第一行首先是一个仅由小写字母组成的字符串,表示书名,然后是一个非负整数 mi(mi≥0),表示该书的标签数量,两者之间以空格分隔;第二行包含 mi 个互不相同、仅由小写字母组成的字符串,表示该书的标签,相邻标签间以空格分隔。 保证所有图书的 mi 之和不超过 30000,且所有书名互不相同。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册