这次答题思路等等各种方面比较顺利,但是还是有一些不稳定因素,比如说不会拍的T2,然而他A了,如果没A我就凉凉了。
大体过程就是,先看完题,写45min的T2,过了三个样例不会拍,于是过了,然后写了T160分暴力,再写了T360分三分暴力,在回头看T1的100分,没有思路,就写了T3的100分,之后还有半个小时,写了个n3T1暴力拍T1的60分n2暴力,最后拍了半个小时发现n3是错了我靠。。。但是没时间了,于是交了T1,拿了60,如果我。主要的失误就是T1没有写好n3的暴力,写好了的话,T1的正解其实挺水的,也许半个小时我就想出来了,这样没准就AK了。
题解:
T1:其实挺水的不过我没写出来。。。大体来说就是找到一些左右端点交换之后可以成为固定点的区间,然后按照这些区间的旋转中心来排序,挨个扫一下可以O1统计答案,这样因为排序所以是nlogn的。
T2:每个点向周围的空地连边,长度为1。向上下左右正对着的墙连边,长度为这个点到离他最近的墙的距离。跑SPFA最短路即可。
T3:主要说一下T3,这道题话了我一个小时45分钟来写,最终A掉了。
首先是$O(n^2h)$的算法:枚举每一个点,枚举$1->1e9$的每个高度,再$O(n)$计算贡献,取最小值即可。
接下来是$O(n^2log_{1.5}h)$的算法:我们发现每个点关于高度的决策所产生的答案是单峰函数,因此可以三分极值从而得到答案。
然后是正解:可以发现决策点不具有单调性,所以每个都必须要枚举,而我们能做的只有快速计算决策答案。把check的$O(n)$优化成$O(logn)$。
首先写一下式子,以左边为例,右边同理,设原来的高度为$a_j$,需求的高度为$h_j$.
$h_j-j=h_i-i$
$h_j=h_i-i+j$
$res=\sum \limits_{j=1}^{i-1}abs(h_j-a_j)$
$ =\sum \limits_{j=1}^{i-1}abs(h_i-i-(a_j-j)) $
我们发现$abs$里的东西可以快速用树状数组求和,但是套了绝对值之后,有正有负,无法快速计算,考虑排序每个点的$a_j-j$的值,离散到下标,维护左右两颗树状数组,维护下标所代表的点的前缀和与点的个数。这样我们在排序后的数组中二分查找到位置,然后在树状数组中查询,查询到比他小和比他大的和与个数,这样就可以$O(logn)$计算答案。
总复杂度$O(nlog_{1.5}hlog_2n)$
可以解决本题。
关于某skyh的垃圾退火,在此不提。
其实这次离$AK$差的不远,如果我能够在最后半个小时不怂,直接刚正解,也许分数还会再高40分,可是我没有,于是失掉了这个机会。
人不能老怂,需要勇气的时候要确保他荷枪实弹整装待发,永远这样保持自信并清醒的自信。