【CPS-S2019模拟】10.23比赛总结

我太难了

比赛思路

传送门

  • 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 Sidwi=d,S=wi
    然后假设 f ( d ) = ∑ ∣ i − d ∣ ∗ w i − d ∗ S f(d)=\sum {|i-d|*w_i}-d*S f(d)=idwidS,要使得 f ( d ) = 0 f(d)=0 f(d)=0
    发现这是一个单调递减的函数,因为如果d变大,前面的增量比后面的小。
    二分找零点前的整数,用树状数组维护和就可以找到。
    再解个方程就好了。

总结

  • 数组一定要检查大小。
  • 注意观察题目性质,期望题高斯消元真的是最常规的套路呀。
  • T3除了题意就是一道水题。。。但是我因为打错了一个字符调了两天。。。心态崩了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值