1 条题解
-
0
自动搬运
来自洛谷,原作者为

云浅知处
喵搬运于
2025-08-24 21:40:17,当前版本为作者最后更新于2020-08-14 16:55:05,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
注:洛谷博客区表格渲染已经炸掉=_=,还是在题解区吧QAQ
首先来看这个什么三元组。
定义一种特殊的三元组:,其中都代表纸带上格子的编号,这里的三元组要求满足以下两个条件:
- 是整数,;
- 颜色相同。
满足上述条件的三元组的分数规定为 。
诶,我们发现,这个「分数」跟 之间,半个咕值的关系都没有啊 QAQ?
于是,秒懂
:又, 是偶数,所以 同奇偶。
这就是 的用处啦QAQ。
由于不同颜色的 肯定不会产生分数,所以我们可以先把这个「狭长的纸带」按照颜色分类,最后把每种颜色产生的分数加起来即可。
然后不同奇偶性的 也不会产生分数,所以把每个颜色种类按照奇偶性再分个类,最后把奇数产生的分数和偶数产生的分数加起来即可。
举个例子:
格子编号 1 2 3 4 5 6 7 8 9 10 格子上的数字 5 3 2 2 2 7 8 2 5 格子颜色 2 1 1 2 1 那么先按照颜色分类:
颜色为 的:
格子编号 3 4 6 10 格子上的数字 3 2 5 格子颜色 1 颜色为 的:
格子编号 1 2 5 7 8 9 格子上的数字 5 2 7 8 2 格子颜色 2 2 再按照编号分类:
颜色为 ,编号为奇数的:
格子编号 3 格子上的数字 3 格子颜色 1 颜色为 ,编号为偶数的:
格子编号 4 6 10 格子上的数字 2 5 格子颜色 1 颜色为 ,编号为奇数的:
格子编号 1 5 7 9 格子上的数字 5 2 7 2 格子颜色 2 2 颜色为 ,编号为偶数的:
格子编号 2 8 格子上的数字 5 8 格子颜色 2 好的,分类完毕!
那么,怎么计算分数呢?
当然可以 暴力算一通。做法显然,这里不多说了。
不过,复杂度铁定爆炸。
考虑更优的做法。
拿上面那个例子中,颜色为 ,编号为奇数的 个格子来举个例子:
由于颜色显然是一样的,而且计算分数也和颜色无关,所以就不用再管颜色了。
然后设 为这一组中第 个数的编号, 为这一组中第 的数的颜色。
1 5 7 9 5 2 2 先看前两个数,他们产生的分数为:
然后考虑当第三个数加入时,多出来的分数。
第三个数和第一个数会产生一些分数:
第三个数和第二个数也会产生一些分数:
所以多出来的分数为:
$$(f[1]+f[3])\times(n[1]+n[3])+(f[2]+f[3])\times(n[2]+n[3])$$展开后,得到:
$$f[1]\cdot n[1]+f[1]\cdot n[3]+f[3]\cdot n[1]+f[3]\cdot n[3]+f[2]\cdot n[2]+f[2]\cdot n[3]+f[3]\cdot n[2]+f[3]\cdot n[3] $$把 和 提取出来:
$$f[1]\cdot n[1]+\color{red}f[1]\cdot n[3]\color{black}+\color{skyblue}f[3]\cdot n[1]\color{black}+\color{red}f[3]\cdot n[3]\color{black}+f[2]\cdot n[2]+\color{red}f[2]\cdot n[3]\color{black}+\color{skyblue}f[3]\cdot n[2]\color{black}+\color{skyblue}f[3]\cdot n[3] $$(标红的是提取出来的 ,标蓝的是提取出来的 )
$$n[3]\cdot(f[1]+f[2]+ f[3])+f[3]\cdot(n[1]+n[2]+n[3])+n[1]\cdot f[1]+n[2]\cdot f[2] $$从这个式子中,我们看出,只需要处理 数组, 数组,还有 的前缀和即可。
后面也是一个一个添加进来,一样的。
到了这一步之后,代码实现基本已经没有任何难度了=_=
所以,就不放啦QAQ。
- 1
信息
- ID
- 1718
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者