Noip2015pj求和
Posted sai0511
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Noip2015pj求和相关的知识,希望对你有一定的参考价值。
大佬们的题解都看不懂啊...果然还是太弱了呢。那么这里就给出一个自认为比较好理解的题解吧(qwq)
正文部分:
首先考虑部分分:
(10pts:O(n^3))枚举
(40pts:O(n^2))枚举:
移项得知:(2y=x+z),那么对于(x+z)为偶数的时候,一定有(y)存在,否则相反,于是复杂度就降了一维:
(100pts:O(n))
同样继续(40pts)做法:将(y)移项:
那么原式就成了:[x+z=2y]
于是我们就可以讨论(x)与(z)的奇偶性:
奇+偶=奇
奇+奇=偶
偶+偶=偶
偶+奇=奇
发现没有:(x)与(z)的奇偶性必须是相同的
那么我们不妨定义一个集合(i),它有(n)个元素,并且这个集合里的数都是同奇偶且颜色相同的。(为方便,之后英文(number)统一写成(num))
于是这个集合所造成的贡献就是:
((i_1+i_2)(num_{i1}+num_{i2})+(i_1+i_3)(num_{i1}+num_{i3})+...+(i_{n-1}+i_n)*(num_{i_{n-1}}*num_{i_n}))
好晕啊。。那我们不妨就单拿(i_1)来举例子,即只考虑与(i_1)有关的项:于是式子就变成了:
((i_1+i_2)(num_{i_1}+num{i_2})+..+(i_1+i_n)*(num_{i_1}+num_{i_n}))
似乎毫无头绪,那么尝试把与(i_1)有关的式子展开一下:
(i1*num_{i_2}+i1*num_{i1}...+i1*num_{in}+i1*num_{i1})
发现没有,似乎有些规律:
继续尝试,将式子整理一下:
(i1*(num_{i2}+...+num_{in})+(n-1)*i_1*num_{i1})
我们来解释一下为什么是(n-1)组,因为(i_1)与(i_1)不能组合为一组,但是与集合中的其他元素都能组合,顾为(n-1)组。
当做到这一步时,恭喜你,你已经离成功很近了。
这时还差最后一步,很明显:((num_{i2}+...+num_{in}))这个东西是不确定的,比如当统计(i_2)时这个东西就变成了((num_{i1}+num_{i3}+...+num_{in})),但是我们要预处理出来的一定是一个可以计算的数,于是就要考虑有没有什么方法可以变形出一个等价的式子。
发现这个东西是不是跟(i_1+i_2+...+i_n)很像?没错,我们把这个东西加上(i_1*num_{i1}),在最后面再减掉(i_1*num_{i1}),于是原式就变成了这样:
(i1*(num_{i1}+num_{i2}+...+num_{in})+(n-1)*i_1*num_{i1}-{i_1}*{num_{i1}})
合并一下同类项:
原式=(i1*(num_{i1}+num_{i2}+...+num_{in})+(n-2)*i_1*num_{i1})
=(i_1*[num_{i1}+num_{i2}+...+num_{in}+(n-2)*num_{i_1}])
呼呼,终于归纳完了。
于是我们就可以求出一个关于(i_n)的公式:
(i_n*[num_{i1}+num_{i2}+...+num_{in}+(n-2)*num_{i_n}])
很明显(num_{i1}+num_{i2}+...+num_{in})是可以预处理出来的,于是这道题就做完了。。真毒瘤啊。应该已经很清楚了吧,那我就不放代码啦(qwq)。
以上是关于Noip2015pj求和的主要内容,如果未能解决你的问题,请参考以下文章