2022.04.11省选模拟赛总结
1.时间安排
7:20~8:00 看题面
T1:树上问题,应该是数据结构题,可能是点分树,有20分的n2,还有20分nlog2,还有20分的定点查询,很可做。
T2:计数问题,数据范围只有50,可能很难,有30分的状压,没看懂限制边\(x\)到\(y\)的\(|x-y|\leq 12\),有什么用意。
T3:字符串题,10分的n^3,可能用hash乱搞能搞30或60分。
看完题面后调试环境,结果一直运行失败,搞了很久才发现考试机房的电脑是32位系统,赶紧码好板子开始写题。
8:00~8:30
写了T1的20分n^2暴力,但是一开始的bitset思路空间开销太大,换了个vector的写法后,忘了题目限制多解只输出一个……
点分树有点忘了,先写后面的题。
8:30~9:00
写完30分状压。
一直品味\(|x-y|\leq 12\)的限制有什么意味,但是数据范围很小,限制度数似乎不是题目的目的。
没什么想法,先看T3。
9:00~10:30
先写了10分的n^3暴力。
暴力比较字符串是O(n)的,所以可以在优化比较的时间复杂度上下手,先想怎么用hash O(1)比较,没什么想法,接着想可不可以O(log)比较,也没想出来怎么做。
后来换了个思路,提前把所有子串提出来放map里面,然后枚举当前串的所有近似串,在map里查找,复杂度理论是可以过5000的数据的。
但是实际测试直接运行错误了,查了好久,发现问题在于查询的时候直接访问了h[now](h是个unordered_map)。即使now不存在,map也会自动给他开一个位置,而总串量是8e7级别的,直接M掉。
改成if(h.find(now)==h.end())就可以避免这个问题了,本地跑没问题。
感觉n=100000,m=100似乎也能跑过,试了一下,能极限跑过,但是特殊构造后也能跑到20s左右,想着万一数据水了,也写了一份。
10:30~11:00
回头写T1,对n=100000还是没什么想法,不过定点查询是可以做的。
两次dfs求出所有点到两个定点的距离,把pair转longlong存map里面查询,因为数据随机全是无解,所以只能手构数据,测试没问题。
11:00~11:30
回忆点分树,完全想不起来,开摆。
result:
T1:20 T2:30 T3:30

浙公网安备 33010602011771号