8:30−9:008:30-9:008:30−9:00
看题,认认真真读了一遍 T4T4T4 都没明白什么意思,所以就不看了,直接放弃。乍一看还很像 博弈 ,但是其中一个是带着一定套路的,所以应该模拟可水分。
9:00−9:309:00-9:309:00−9:30
肯定是左右两边开始,尽量匹配短的串,然后往中间靠。
写了个伪 哈希 ,忘了咋 O(N)O(N)O(N) 求长度为 NNN 的字符串任意字串的 哈希值 了,肥肠难过。
9:30−9:409:30-9:409:30−9:40
手推 HashHashHash 的式子啥的,搞不出来。
9:40−10:109:40-10:109:40−10:10
T2T2T2 的 暴力模拟 很好写,没推出啥东西所以只写了 202020 的暴力
10:10−11:0010:10-11:0010:10−11:00
T3T3T3 本来想写 倍增求LCA 或者 树链剖分 之类的,但是想想还是写 Floyd 效益高点,但是码到一般又忘了书上的板子,还是凭借动态规划的经验又推了推才出来。
11:00−12:2011:00-12:2011:00−12:20
想了个奇怪的 T1T1T1 写法,把左右两边拆开想,在右边的话建一个类似链表的东西,连着相同的字母。从左边的第 iii 开始跟右边的匹配,匹配不上就往前跳。如果到最后第 iii 个字符都匹配不上就也不匹配其他字符了。加了些剪枝,调试很麻烦。
12:20−12:4012:20-12:4012:20−12:40
写 T3T3T3 特殊数据 202020 分的链。
12:40−结束12:40-结束12:40−结束
检查文件名,freopen
,和版本问题。
T1T1T1 就是个哈希,我给忘了咋整了,含泪丢 404040 分。
T2T2T2 思维和代码实现能力还是哪个还有很大的进步空间,三位偏序,还得有个存曼哈顿距离。
T3T3T3 骗人,数据没有链。
原来我一直用的都是错误的 哈希,难怪不会求子串。
如字符串 ′abd′'abd'′abd′ 在存的时候,正确的方法应该是
刚存 ′a′'a'′a′ 时 hx=1hx = 1hx=1
存成 ′ab′'ab'′ab′ 时 hx=hx∗P+2hx = hx * P + 2hx=hx∗P+2,PPP 为一个质数 ,222 是因为 ′b′−′a′+1=2'b' -'a' + 1 = 2′b′−′a′+1=2而并不是因为下标为第222 个。
存成 ′abd′'abd'′abd′ 时 hx=hx∗P+4hx = hx * P + 4hx=hx∗P+4
′abd′'abd'′abd′ 就可以表示为 ((1∗P+2)∗P+4)((1*P+2)*P+4)((1∗P+2)∗P+4)。
相当于是 P2+2∗P+4P^2+2*P+4P2+2∗P+4
′abd′ = ′a′+′bd′'abd'\; = \;'a' + 'bd'′abd′=′a′+′bd′,所以就可以通过 P2+2∗P+4−1∗P2P^2+2*P+4 - 1*P^2P2+2∗P+4−1∗P2 得到 ′bd′'bd'′bd′
这里的 −1∗P2-1*P^2−1∗P2 是因为 ′bd′'bd'′bd′ 长度为 222
验证下:
存′b′'b'′b′时为 222
存下来 ′bd′'bd'′bd′ 就是 2∗P+42*P + 42∗P+4