2024.2.15模拟赛总结

这次发挥很好啊,rank1,300pts,比rank2高了70pts

1|0T1

发现操作二的影响是不可避免的,就尽可能让操作1没影响,每次就删连续的相同的数字,然后统计一下即可

2|0T2

感觉思路很自然,首先只需要保留近k次操作
如果有一个横的和一个竖的覆盖两个点,就可以直接走曼哈顿距离
如果两点之间被横或竖的填满就走曼哈顿距离
如果两个横行或竖行,就找一个代价最小的另一种操作,如果都没有就-1,用线段树维护上面的操作,每一次可以直接二分或线段树二分,由于开了3s,所以稳过(也不稳,要不是我卡了常就挂了)

3|0T3

找到y坐标最小的点,然后把这个点左边的所有点设为不可走,然后从起点开始跑最短路然后枚举合并上下部分的答案
如果起点在y坐标最小的点左边,就换成找y坐标最大的点,把这个点的右边设为不可走,然后一样做即可
这样做的合法性其实就是y坐标最小的点的左侧一定会被经过,其他的不一定

4|0T4

首先,我们还是考虑推一下式子
k0=power1power2,k1=point1point2
point=2×sig(k0)×(|k0|+11)A×sig(k1)×(|k1|+11)
我们设函数f(x)=x|x||x|+11,特别的,x=0时为0,g(x)=xf(x)
首先,f是单调递增的,这个是显然的
然后,g也是单调递增的,这是由于f的增长速率是小于1的,就是说x每增大1,f增大小于等于1
然后我们就可以化简式子,先看A=0
point=point1+2×f(k0),显然单调
A=1:
point=point1+2×f(k0)sig(k1)×(|k1|+11)=point1+2×f(k0)k1sig(k1)×(|k1|+11)+k1=point2+2×f(k0)+g(k1),也单调
于是得到结论:point1越大越优,power越大越优
所以二分power,先以1为根做一遍,算出子树中叶子到当前点的最优的point,然后换根,每次就相应的更新即可,有许多细节和玄学精度问题,需要调参(?)

5|0续:B组T4

一道黑题!!!很有思维难度
首先设fi表示把i的子树和i的父边全部覆盖的最小代价,答案就是i的子树求和
但局部最优不一定全局最优,所以我们把所有可能的全部存下,用左偏树来存储
然后分类讨论,第一种就是从x出发的路径,代价就是x出发的路径加上子树的f的和
第二种就是子树中已经有一个覆盖了x的父边的,设当前子树为y,当前y的方案代价为k,那么x的代价就是k+fson[x]fy
那么就可以先把当前节点挂着的加入堆,然后再从子树合并,合并前先把子树全局减fy,最后再加上sum
但是可能无法覆盖x的父边,需要删除这样的方案,每次对堆顶判断即可,然后f就取堆顶即可


__EOF__

本文作者longzhaocheng
本文链接https://www.cnblogs.com/longzhaocheng/p/18016513.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   longzhaocheng  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示