题解 P2671 【求和】
更好的阅读体验?
注:洛谷博客区表格渲染已经炸掉=_=,还是在题解区吧QAQ
首先来看这个什么三元组。
定义一种特殊的三元组:
(x,y,z) ,其中x,y,z 都代表纸带上格子的编号,这里的三元组要求满足以下两个条件:
满足上述条件的三元组的分数规定为
(x+z) \times (number\_x+number\_z) 。
诶,我们发现,这个「分数」跟
于是,秒懂:
又,
这就是
由于不同颜色的
然后不同奇偶性的
举个例子:
| 格子编号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 格子上的数字 | 5 | 5 | 3 | 2 | 2 | 2 | 7 | 8 | 2 | 5 |
| 格子颜色 | 2 | 2 | 1 | 1 | 2 | 1 | 2 | 2 | 2 | 1 |
那么先按照颜色分类:
颜色为
| 格子编号 | 3 | 4 | 6 | 10 |
|---|---|---|---|---|
| 格子上的数字 | 3 | 2 | 2 | 5 |
| 格子颜色 | 1 | 1 | 1 | 1 |
颜色为
| 格子编号 | 1 | 2 | 5 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|
| 格子上的数字 | 5 | 5 | 2 | 7 | 8 | 2 |
| 格子颜色 | 2 | 2 | 2 | 2 | 2 | 2 |
再按照编号分类:
颜色为
| 格子编号 | 3 |
|---|---|
| 格子上的数字 | 3 |
| 格子颜色 | 1 |
颜色为
| 格子编号 | 4 | 6 | 10 |
|---|---|---|---|
| 格子上的数字 | 2 | 2 | 5 |
| 格子颜色 | 1 | 1 | 1 |
颜色为
| 格子编号 | 1 | 5 | 7 | 9 |
|---|---|---|---|---|
| 格子上的数字 | 5 | 2 | 7 | 2 |
| 格子颜色 | 2 | 2 | 2 | 2 |
颜色为
| 格子编号 | 2 | 8 |
|---|---|---|
| 格子上的数字 | 5 | 8 |
| 格子颜色 | 2 | 2 |
好的,分类完毕!
那么,怎么计算分数呢?
当然可以
不过,复杂度铁定爆炸。
考虑更优的做法。
拿上面那个例子中,颜色为
由于颜色显然是一样的,而且计算分数也和颜色无关,所以就不用再管颜色了。
然后设
| 1 | 5 | 7 | 9 | |
| 5 | 2 | 7 | 2 |
先看前两个数,他们产生的分数为:
然后考虑当第三个数加入时,多出来的分数。
第三个数和第一个数会产生一些分数:
第三个数和第二个数也会产生一些分数:
所以多出来的分数为:
展开后,得到:
把
(标红的是提取出来的
从这个式子中,我们看出,只需要处理
后面也是一个一个添加进来,一样的。
到了这一步之后,代码实现基本已经没有任何难度了=_=
所以,就不放啦QAQ。