分析:
这哪是前缀和呀这题,这明明是数学,纯纯的数学公式推导
根据以下这两个条件:
1. xyzxyzxyz是整数, x<y<zx<y<zx<y<z, y−x=z−yy-x=z-yy−x=z−y
2. colorxcolorxcolorx = colorzcolorzcolorz
可以很清楚的看出来实际上 yyy 在这里根本没起作用, 只要x+z=2yx+z=2yx+z=2y,colorxcolorxcolorx = colorzcolorzcolorz就行了。也就是只要x,zx,zx,z的奇偶相同,颜色相同就OK。 所以,很自然的就想到可以把奇偶和颜色分开,分别计算。
在此基础上再做优化就是数学推导,三元组规定为(x+z)(x+z)(x+z) x (numberx+numberz)(number_x+number_z)(numberx +numberz ),把式子展开来看就是: xxx x numberx+xnumber_x+xnumberx +x x numberz+znumber_z+znumberz +z x numberx+znumber_x+znumberx +z x numberznumber_znumberz
在对颜色和奇偶进行分类后,对我们的每一个集合内的数来分析就有:
(i1+i2)(i_1+i_2)(i1 +i2 ) x (ni1+ni2)+(i1+i3)(n_{i1}+n_{i2})+(i_1+i_3)(ni1 +ni2 )+(i1 +i3 ) x (ni1+ni3)+......+(il+ik)(n_{i1}+n_{i3})+......+(i_l+i_k)(ni1 +ni3 )+......+(il +ik ) x (nil+nik)+(i2+i3)(n_{il}+n_{ik})+(i_2+i_3)(nil +nik )+(i2 +i3 ) x (ni2+(ni3))+(i2+i4)(n_{i2}+(n_{i3}))+(i_2+i_4)(ni2
+(ni3 ))+(i2 +i4 ) x ni2+ni4+......+(i2+ik)n_{i2}+n_{i4}+......+(i_2+i_k)ni2 +ni4 +......+(i2 +ik ) x (ni2+nik)+......+(ik+ik−1)(n_{i2}+n_{ik})+......+(i_k+i_k-1)(ni2 +nik )+......+(ik +ik −1) x nik+nik−1n_{ik}+n_{ik-1}nik +nik−1
后面再继续乘开来我们就会发现 (k−1)(k-1)(k−1) x (i1(i_1(i1 x ni1)+i1n_{i1})+i_1ni1 )+i1 x ∑t=2knit+\sum_{t=2}^k n_{it}+∑t=2k nit +一些后面的内容,请各位动动自己的聪明的脑瓜和可爱的小手自己算吧
然后(k−1)(k-1)(k−1) x (i1(i_1(i1 x ni1)+i1n_i1)+i_1ni 1)+i1 x ∑t=2knit\sum_{t=2}^k n_{it}∑t=2k nit 就可以进一步写成(k−2)(k-2)(k−2) x (i1(i_1(i1 x ni1)+i1n_i1)+i_1ni 1)+i1 x ∑t=1knit\sum_{t=1}^k n_{it}∑t=1k nit 这里我们终于看到了前缀和,感天动地。把后面的内容展开的话就会发现他们最后可以归成一个形式类似的式子也就是
(k−2)×(ir×nir)+ir×∑t−1knit(k-2) × (i_r × n_{ir})+i_r × \sum_{t-1}^k n_{it} (k−2)×(ir ×nir )+ir ×t−1∑k nit
所以我们就可以先处理出前缀和和相同颜色,相同奇偶的数的个数,这样只要O(n)O(n)O(n)的时间复杂度就可以处理出来所有的结果了。
AC代码
欢迎加入团队
> 打公式真的好辛苦,求一个免费的赞