限时一秒的匹配靠什么过

文本有一百万个字、模式几千个字,还要在 1 秒内找完。真正能保证过的是【0】。

开始练习 →

补全 next 数组

场景:实验机上 ~/work/str/kmp.cpp 用 KMP 找模式的全部出现位置,但 build_next 还是空的。 任务:补全 build_next。make 编译,./kmp < sample.txt 自测;check 会

开始练习 →

一百万字的文本里找

场景:~/work/str/count.cpp 数模式在文本里出现几次,结果对,但文本一长(10^6)、模式一长(几千),就要跑十几秒。 任务:改写 count.cpp,让大数据在 1 秒内算完,输出格式不变。make 编译(-O2)后自测

开始练习 →

写 Trie 数前缀

场景:~/work/str/trie.cpp 按指令往词典里放单词、问以某个前缀开头的单词有几个,add_word 和 count_prefix 还没写。 任务:补全这两个函数。make 编译后自测;check 会用随机指令序列对拍。 可操

开始练习 →

修好子串哈希

场景:~/work/str/sub.cpp 用前缀哈希判断两段子串是否相同,可明明一样的两段它常说不同。 任务:修好 get(l, r) 的公式。make 编译后用 sample.txt 自测。 可操作范围:只在分给你的这台实验机上操作。可

开始练习 →

让哈希判错一次

场景:~/work/str/eq.cpp 只拿哈希值判断两个串是否相同,模数只有几千。 任务:按 ~/题目.txt 的要求,找两个不同、长度都符合要求的小写字母串,让 eq 输出 same,写进 ~/work/str/answer.txt(

开始练习 →

修好 Manacher 越界

场景:~/work/str/pal.cpp 用 Manacher 求最长回文子串的长度,带着内存检查一跑就报越界。 任务:修好往外扩的那个 while 条件。make 编译(带内存检查)后自测,内存检查不报错、结果正确才算过。 可操作范围:

开始练习 →

测过了和证明了差在哪

一个算法在一万组数据上都跑对了。这件事和「它是对的」之间的差距是【0】。

开始练习 →

对拍能给出什么样的结论

第 1 步:两种判素数的写法对拍 第 2 步:前面这些,两边都一致 第 3 步:到这一个,两边分叉了 第 4 步:一致只说明测过的那些 116 117 118 119 120 121 拿另一种写法对拍,两边结果一样。这说明【0】。

开始练习 →

一个反例能说明什么

找到一组输入让算法给错了答案。这一组输入【0】。

开始练习 →