【题解】Solution Set - NOIP2024集训Day57 字符串 hash

【题解】Solution Set - NOIP2024集训Day57 字符串 hash

https://www.becoder.com.cn/contest/5653

实际上感觉像数据结构。😅


「CF213E」Two Permutations

(FAKE

注意到,如果我们固定 \(c\) 的右端点在 \(b\) 位置,此时的 \(x\) 是唯一的。

我们不妨去枚举这个位置 \(i\),然后一个必要条件是 \(a_n+x=b_i\),然后用 hash 去检查其充分性就行了。

3min


WA on #4

(读错题辣!子序列不是子串啊啊啊啊啊!!(我说怎么可能这么简单

考虑去枚举 \(x\),然后维护相应的 \(c\)\(b\) 中的相对位置关系是否和 \(a\) 相同。

相对关系用线段树或者平衡树是好维护的,但是怎么判断其和 \(a\) 的关系?

20min


看了一下题解,好像很有道理。

我们直接 \(c\) 按照相对关系 hash 起来(线段树维护),这样其实就把 \(c\) 中的子序列,转化成了一个子串,剩下的就是一开始读错题的做法了。


(不是要点都想到了啊,我是什么 sb


「CF961F」k-substrings

注意到从 \(i\)\(i+1\) 的时候,我们只要让 \(i\) 的 border 去掉开头和结尾,就可以构造出一组解。

然后似乎没什么用。

18min


https://www.luogu.com.cn/article/uef83pzm

wtf,真是这个结论。。。


「CF580E」Kefa and Watch

看上去很像分块。

实际上不用直接维护区间 hash 值,然后用 border 的性质判 \([l,r-d]\) 是否是 border 就行了。

6min


「CF504E」Misha and LCP on Tree

直接二分答案,然后树剖 + 线段树在树上查前缀 hash check 就行了。

这样是两只 \(\log\) 的,卡卡应该能过。

5min


https://www.luogu.com.cn/article/3xoglst1

实际上,因为不带拐点的路径是可以 \(O(1)\) 差分求 hash 值的,先匹配不含拐点那一部分,不能完全匹配了(即不存在包含关系),再开始二分。

这样就是单 \(\log\) 的了。没有了线段树似乎更好打了。


\(\log\) 真的难打的要死,😥。滚去打双 \(\log\) 了。


「CREC2016」外观分析(Appearance Analysis)

幽默模拟题,把每个窗户 hash 一下然后放在 map 里面,就行了。

0min



「国家集训队」等差子序列

做过。


显然我们只用考虑 \(len=3\) 情况。

设最终结果为:\(a_i + x = a_j = a_k - x\)

考虑去枚举 \(j\),设 \(S\)\(j\) 以前在值域上出现情况的 01 串,我们就是要判断:将 \(S\)\(a_i\) 处对折是否无重叠部分。

这个用线段树 & hash 维护一下这个 01 串的正反序若 \([1,a[i])\) 的正序 \(\ne(a[i],n]\) 的反序,则有解。


注意要先保证比较的两个串的长度相等再比较,否则肯定不等。

15min

posted @ 2024-10-21 09:12  CloudWings  阅读(9)  评论(0编辑  收藏  举报