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

posted @ 2022-04-11 13:05  Displace  阅读(30)  评论(0)    收藏  举报