我太难了
比赛思路
- T1:因为n显然是给你n方的,所以n2枚举一波,然后发现对答案的贡献是一个段连续的区间和,差分两次就好了。
- T2:随机游走???猛推一波随机游走的式子,完全靠yy,正确性显然没有,所以就没有打。然后发现直接高斯消元有60分。
- T3:题意都没懂。。。
赛后消化
- T1数组开小gg。
- T2优化一下常数就n3水过去了(没有梦想的我不配拿多40分)。从叶子往上倒着高斯消元就好了,因为用i消j,i儿子已经没有了,剩下与i有关的只有i的父亲和爷爷的位置上有值,而j的这两个位置上也一定有值,所以消父亲的时候不会多出一些位置从0变成了别的。时间复杂度和正确性就能够保证了。
- 实际上T2还有nlogn 的做法。
- T3,实际上求的是一个最大的d,使得
∑ ∣ i − d ∣ ∗ w i S = d , S = ∑ w i \sum \frac {|i-d|*w_i} {S} =d,S=\sum w_i ∑S∣i−d∣∗wi=d,S=∑wi
然后假设 f ( d ) = ∑ ∣ i − d ∣ ∗ w i − d ∗ S f(d)=\sum {|i-d|*w_i}-d*S f(d)=∑∣i−d∣∗wi−d∗S,要使得 f ( d ) = 0 f(d)=0 f(d)=0
发现这是一个单调递减的函数,因为如果d变大,前面的增量比后面的小。
二分找零点前的整数,用树状数组维护和就可以找到。
再解个方程就好了。
总结
- 数组一定要检查大小。
- 注意观察题目性质,期望题高斯消元真的是最常规的套路呀。
- T3除了题意就是一道水题。。。但是我因为打错了一个字符调了两天。。。心态崩了。