【题解】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
(读错题辣!子序列不是子串啊啊啊啊啊!!(我说怎么可能这么简单
考虑去枚举 \(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