模拟73
$T1$
简单模拟。
$T2$
考场上那个结论我没有证出来。。但是我想到了而且打了出来,而且它过了对拍。
好像比较显然的是只会保留最大的区间,若最大区间为降,那么需要补上增区间。于是最多就只有两个区间了。
树装数组优化$dp$即可
$T3$
考场上打了暴力,然而讨论时忽然发现大家的排序的本质含义都是给实部和虚部乘上一个系数后排序,也就是枚举斜率。只排8个显然太少,于是怂恿miku打了随机化,然后意料之中竟然A了!
实际上最终的大小就是组成生成树的所有边在对应直线上的投影之和,于是我们可以ran数枚举这个斜率,直接枚举显然数量级太大,虽然说你把相邻枚举的差值定到0.07也能A而且随机化和枚举跑得都比正解快得多,思考$Kruskal$的过程,我们可以发现生成树的形态只与不同边模长的相对关系有关,而这些关系只有$O(m^2)$对,使得我们可以非常暴力地枚举它们。每对边大小相对关系的分界都是一条斜率为若干的直线,可以通过三角函数算出来。
最终我们会得到$m^2$条直线,这些直线将整个坐标系划分成了$m^2$个区间,显然在每一个区间中大小关系都是相同的,进行$Kruskal$得到的结果也相同。于是我们在每个区间随便选一个斜率,进行一次$Kruskal$,将所有区间的答案取max即可。
随机化NB