2021 CSP 7连测 day3
时间分配
6:00~6:10 赶到机房的路上
6:10~6:15 审T1题
6:15~6:35 淦T1代码
感觉太简单了,又检查了几遍,发现似乎没什么细节(但谁知道呢?,于是我开始淦T2了
6:35~6:36 审T2题并发现了一个很惊悚的事情
看题的第一眼,
w
o
c
woc
woc !!!这不是第一章例题 费解的开关 吗???
我直呼内行,然后开始苦逼的码代码。。。
6:32~7:15 开始淦代码,然后发现我太单纯了
思路会了,我就以为我会了。
然后发现我错了,大错特错!!!
太难码了,但我还是成功了(对不对就不知道了。。。
7:15~7:25 审T3题并淦暴力60代码
部分分很友好,然后我先去码下一题了
7:25~8:25 审T4题并淦暴力60代码
开始正经写考试思路了:
可以建回文树,可求出一个字符串的回文子串的个数。然后每次暴力枚举,修改每一位的字符,再根据新组成的字符串重新建树。将所以枚举的答案取
m
a
x
max
max 即可。(预计60分
想法很简单,但不太好写。。。
8:25~8:30 重新看T3,越看越不对劲
w
o
c
woc
woc !!!又写过(具体在哪做的忘了。。。
记得好像是
01
t
r
i
e
01\ trie
01 trie。。。(然而不是)
8:30~8:50
想了又想,想到需要建两个 t r i e trie trie 树,然后比较???但怎么在 O ( n ) / O ( l o g n ) O(n)/O(log\ n) O(n)/O(log n) 的复杂度判 1 1 1 的个数还没想出来。。。然后我又转移战场了。。。
8:50~?:??
写总结。。。
赛后总结反思
T1 斯诺克
A了!!!
T2 翻转
又A了!!!
T3 数对
和估分一样呢!!!
正解:
考虑优化。可以用一个数组记录
a
i
x
o
r
(
2
x
)
a_i\ xor\ (2^x)
ai xor (2x) 出现了几次,因为可能存不下,需要用
h
a
s
h
hash
hash 存储;然后可以统计有多少个
a
i
a_i
ai 和
b
j
b_j
bj 相等,减去这个数乘
30
30
30,最后答案除以
2
2
2(因为会有重复。
T4 回文串
复杂度算错了,应该是25分。。。
正解:
可以考虑
M
a
n
a
c
h
e
r
Manacher
Manacher 暴力切换字符。能拿25分。
发现切换字符是肯定不会切换成没出现过得字符,所以只要
O
(
n
)
O(n)
O(n)将出现过的字符统计一下,然后能多拿5分 蚊子再小也是肉
考虑正经优化,因为当将位置
i
i
i 的字符切换成
c
c
c,会有一些回文消失,也会有一些新的回文出现。
所以先考虑消失的回文,当这个回文的中心为
a
a
a时,切换的回文位置在区间
[
a
−
r
a
,
a
+
r
a
]
[a-r_a,a+r_a]
[a−ra,a+ra] 时才会消失(好像要用扫描线;再考虑新的回文,当这个回文的中心为
a
a
a,则回文的半径为
d
=
a
−
i
d=a-i
d=a−i,显然字符串
w
a
−
d
,
a
+
d
w_{a-d,a+d}
wa−d,a+d 之前不是回文,但字符串
w
a
−
d
+
1
,
a
+
d
−
1
w_{a-d+1,a+d-1}
wa−d+1,a+d−1 在之前时也回文,且是以
a
a
a 为中心的最长回文,因此
d
=
r
a
+
1
d=r_a+1
d=ra+1(
h
a
s
h
hash
hash+二分查找计算
r
a
r_a
ra。
预计分数
100+100+60+60=320(大概可能也许应该估计会高那么 y i yi yi 丢丢)
实际分数
100+100+60+25=285(T4估分应该为25的,算错了。。。
反思
- T1、T2正确率还可以,下次尽量保持(速度还是要练一练,第2题花的时间有点长。
- T3应该再好好考虑的,不到最后一刻千万不能放弃挣扎(能不能做到就另说了。。。在考试是不能根据一点就死磕,毕竟正解也不是我以为的 01 t r i e 01\ trie 01 trie,一条路不行还是要考虑换一条的,一点一点优化总能成功的。
- T4告诉我计算复杂度一定要小心,我就是算错了以为能拿60分就直接不想了,但没发现其实只有25分,拿五分的优化其实考试也想到了,但按60分的算法优不优化都没区别的,我就成功与那5分失之交臂。。。
总之,继续加油!!!