比赛时间安排
7.50-8.10 t1 暴力复杂度都很大啊,完全没想法 t2 dfs可以试一试,但是感觉复杂度还是会炸,想的是全排列+枚举每个攻击了哪个国家,是否攻击成功 t3 期望,而且样例也不会推
8.10-9.05 t2 dfs写完之后,刚开始一直过不了样例,本来想的是只用一种排序方式,最后乘一个组合数,但是发现是不对的,有可能有的城市攻击完之后他被占领了,就不合法了,所以只好用最开始想的方法,写完之后发现6都跑不动,自闭了,开始疯狂剪枝,最后把6跑到2s(并没什么用),先去想t3了
9.05-9.20 觉得t3的形式很像之前jjh讲的一个字符串的随机游走问题,要考虑重复的部分之类的,然后高斯消元做,但是这数据范围也太。。完全不符合啊,于是看t1了
9.20-9.46 冷静下来看发现暴力分是个dp,分段类型的,就想到斜率优化或者单调队列了。 先把暴力打完,刚开始不过,发现是忘了有些数字可以不要,也就是先和f[i-1]取个max就过了
9.46-10.17 那明显第三档分就是优化呗。 刚开始想的是单调队列,但是发现没法踢队头,于是把我的shu这个数组展开,发现就是斜率优化的式子 分析了一下,发现是单调递增求max,要用单调栈做斜率优化,很快的写完,对拍没问题,50分有了
10.17-11.00 想中间那一档的做法 很明显如果每次都做一次,那么复杂度是3e8的,感觉很接近2s了,貌似卡卡常就能过?注意到每次只修改一个数字,那么这个数字之前的f和s都不变,不是白做了那么多次吗,于是我把修改位置相同的询问存起来,按顺序一起做,这样就能省掉那个常数了吧,而且m是3e5,n是1000,一定有很多相同的位置。 写完之后发现错了,突然意识到,每次处理x相同的一个询问之后,必须把f和s复原才能接着处理下一个,那复杂度不是又回来了??合着半天只省掉了一个n的复杂度吗,爆哭(就是里层循环栈的复杂度) 试了一下拉满的数据,跑了5秒多一点,感觉和没有优化差不多,又试了做m遍的,跑了25秒,还是有明显进步的,再卡卡常吧,然后就卡场失败了
11.00-12.00 想t1卡常,t2dfs,t3暴力,发现都搞不动,自闭时间
赛后反思总结
- 看来写斜率优化是有用的,一下子就能反应过来要用单调栈
- t2暴力写的太der了,虽说可以优化一下,但是也能拿15啊本来,思路没理清楚,有东西重叠了,导致结果算重了,如果再拿10,就第三了(哭)
与正解的差距
T3
10: 真没想到高斯消元那么长的代码只有10分,而正解只有30行!想到了,要枚举随机到的每个字符,然后找最后能匹配的地方,竟然没想到是个nxt??!!(这都能忘,杀了我吧)订完觉得以后这样的题,以后在考场上尽量写出来!
|