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