NOI2019
还没填完(d2t1在uoj上尚未通过,有空填)
d2题解
D1T1 回家路线
本题不知什么原因没有和mq区分开
好像分差只有5,让我想起狗血的「优秀的拆分」
(数据是人出的,人是懒的……)
在我看来权值的计算方式几乎是赤果果的暗示斜率优化
把每个点按时间拆分,然后每个时间拆入和出
那么点内部的等待就是斜率优化模板(有助于帮助老年文化课选手恢复水平……)
点间的移动就是朴素的dag上dp,用map处理有用的点即可
c++11下算法复杂度下限为线性
1 |
|
D1T2 机器人
第二题还是比较中规中矩的NOI题,暴力DP有50分
然后考虑离散化,同一段里面用CF995F的处理方式,插值或者维护下降幂多项式
不过插值会被卡常数到85~95分,下降幂多项式能过
代码有些复杂,可以区分出一些基本功扎实的选手
50分dp:
考虑最右边的最大值,发现可选位置很少,以此为基础dp(l,r,mx)然后枚举mx的位置来转移
复杂度为大常数MB,M为实际访问到的区间(记忆化),据说本题M最大2000
10分无限制:枚举实际用了多少个数即可
1 |
D1T3 序列
暴力DP有32分,然后我一开始想了一个错结论,以为上面取最大的K个(记为X),下面取最大的K个(记为Y),X∩Y定全选,然后2个小时调不出来。。。
实际上是X∩Y要么上下都选要么上下都不选,X-Y选了下面就要选上面,Y-X选了上面就要选下面。。。
这样就可以分成三块搞了。
由于我不擅长贪心,用网络流的思想做的。一共做了3个小时。
我猜现役选手应该会比我熟练地多吧。
1 |
D2T1 弹跳
这道题其实有点像树上的最短路
不同之处在于省去了取出路径的部分,然后把树上路径改为了矩形
但本质上是一样的,至少在工具上,从树上压缩的并查集改为 数状数组套权值线段树或者kdtree维护0/1
空间上都是足够的,时间的话二维线段树调用次数是弹跳装置个数,复杂度为 $O(mlog^2H)$
可能是没怎么写过,但迫于空间压力写了数状数组套权值线段树然后写了很久,树状数组这玩意套东西拓展起来很麻烦
现在想想感觉写四叉树随便写,空间其实也不大……果然数据结构基础知识不扎实是硬伤
upd:好像sgt套set也不错
1 |
|
D2T2 斗主地
1 |
D2T3 I 君的探险
1 |