P2580 于是他错误的点名开始了

P2580 于是他错误的点名开始了

题目介绍

给出 \(n\) 互不相同个字符串,询问 \(m\) 次,每次询问一个字符串是否存在,如存在判断是否已经询问过。

\(n\le 10^4,m\le 10^5\)

做法 1

mapunordered_map

unordered_map 时间复杂度为 \(O(n+m)\),实测 461ms。

code

做法 2

哈希表

每个给定的字符串,算出字符串 hash 值,mod 一个空间范围允许的质数作为 key,然后把字符串本身和 key 存到哈希表里。

询问就在哈希表中查询即可。

时间复杂度 \(O(len(n+m))\),实测 544ms(因为哈希冲突较多,影响时间)。

code

做法 3

本题正解,字典树(trie)

把给定字符串加入字典树,询问就在字典树中查询。

时间复杂度 \(O(len(n+m))\),实测 366ms(时间最短)。

code

posted @ 2024-10-15 21:50  wing_heart  阅读(13)  评论(0)    收藏  举报