P2671求和 洛谷前缀和(详细题解+公式推导)

P2671求和 洛谷前缀和


想给这道题写一个容易懂并且详细一些的题解,如下:

要求的是: ∑ i = 1 n ( x i + z i ) ( I D x + I D z ) \sum\limits_{i=1}^n(x_i+z_i)(ID_x+ID_z) i=1n(xi+zi)(IDx+IDz) (注: x i x_i xi是纸条编号为 I D x ID_x IDx时候的值)

我们将这个式子化简得到: ∑ i = 1 n ( x i I D x + x i I D z + z i I D x + z i I D z ) \sum\limits_{i=1}^n(x_iID_x+x_iID_z+z_iID_x+z_iID_z) i=1n(xiIDx+xiIDz+ziIDx+ziIDz) (*)

再观察这个题目,发现可行的一对 ( I D x , I D z ) (ID_x, ID_z) (IDx,IDz) 必须满足的条件是: I D x ID_x IDx I D z ID_z IDz的奇偶性必须相同,这样才能使得点y到点x和点z的距离相等,这个用数学方法很容易证明,如:

(1)若 I D y ID_y IDy为奇数:

奇数-奇数=偶数,奇数+奇数=偶数; 奇数-偶数=奇数,奇数+奇数=奇数;

(2)同理可证当 I D y ID_y IDy为偶数的情况

有了上面的结论,就可以把纸带上的点进行分类,首先根据点的奇偶性分出来两个集合,然后把每个集合内部的点根据是否是同一种颜色再分成一个个小集合(储存的是点的 I D ID ID,即奇偶性和颜色都相同的点的集合,使用变长数组 v e c t o r vector vector进行储存),储存时注意要按照 I D ID ID的大小从小到大储存,因为x是要小于z的。

当我们对小集合内部进行**(*)**式的累加时,对其使用数学手段进行优化:

假设这个小集合内部有5个点,分别以 x , y , a , b , z x,y,a,b,z x,y,a,b,z 代替,

可以看到每个点都可以与其他的点相连,每个点可以连4条边,但是重复的边要去掉,那么对于这个式子: ∑ i = 1 n ( x i I D x + x i I D z + z i I D x + z i I

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值