时间安排
7.30-7.35 审了T1,思路看完就有了,分两半做,前一半dp,后一半多重集组合计数
7.35-7.50
写T1的上述想法,朴素的写了一下两部分
算了一下复杂度
前半部分的dp空间复杂度m3可过,时间复杂度m4不可过,需要优化,但很显然可以拿个前缀和搞一下
后半部分的组合预处理一下阶乘和逆元即可,空间复杂度O(n+k),时间复杂度O(m*w),均可过
那这个题已经可A了,但为了避免我前一部分就已经写错,加了优化后,代码复杂而导致Debug的难度,所以我决定先对拍
7.50-8.00
瞎写了一个甚至拿不到分的dfs,不过无所谓,拍出来n=m时我的多重集会出错,特判一下就没大问题了
8.00-8.10
继续对拍的同时进行优化dp,前缀和很快就写完了,简单调试后过了样例
8.10-8.20
将优化前后程序对拍大数据,无误
同时造了极端数据进行测时,无误
8.20-8.30
向后推T2,暂无想法,仅想到了最基础的30分暴力Kruskal
8.30-8.45
写完T2暴力,开始向后推T3
8.45-9.00
T3也只会n^4暴力
如果暴力判断每个位置能不能放下船,复杂度n4,如果用bitset预处理一下二维位置,O1判断,那预处理也是n4的复杂度
如果融合一下呢,我只用bitset压一维,另一维在判断时用,这样就可以把复杂度均摊下来了,应该是n^3的,也许可过…?
9.00-9.20
实现上述想法,已经得到了哪些位置可以停船,思考如何统计答案
应该也挺好实现的,同样用bitset,找到所有位置或一下就行了
9.20-9.35
完成整题,测时无误,准备对拍
9.35-9.50
写了一份T3的暴力程序
9.50-10.40
进行对拍,发现错误
1.边界错误
2.bitset我用s|=(1<<i),就会炸掉,直接s.set就好了
3.bfs写错
4.sb了,测时用的sol800ms 我看成了用了1800ms,吓了一跳
测时无误,对拍无误
10.40-10.45
当前期望到手230,只剩T2,但没思路
10.45-11.40
摆烂了,感觉T2像是个莫队,再拿个什么可持久化维护一下,但是我不会,第二档分我也只会维护加点而不会删点
赛后总结
期望得分 230
T1 A了
T2 确实不会
T3 没算bitset 的复杂度,我以为是O(1)的,总复杂度O(n^3)的,就挂掉了