福建省队集训 20180712

福建省队集训 20180712

交互题

有一天,汪巨打算归还他欠 ysy 的 1010 个鸡排的一部分。于是他到了鸡排店,发现店里一共有 109 种鸡排,编号为 1 到 109,其中有 a 种鸡排是不辣的,他打算把每种不辣的鸡排买 b 个还给 ysy。

汪巨带着几卡车的鸡排回到学校,把鸡排从包装袋里倒出来,数了一天一夜,发现居然没有 ab 个 鸡排,少了一些。经过分析,他发现有一种鸡排的包装袋破了,所以有一种鸡排少了一些,这种鸡排只 剩下了 x 个(1 ≤ x ≤ b − 1)。

由于鸡排实在太多了,汪巨懒得再数一遍了,他就把鸡排全给了 ysy,并告诉 ysy 少了哪种你自己 数数吧。由于 ysy 是鸽子,他就把这个光荣的任务交给了你。

由于你的脑容量没有 ysy 大,并且你也很懒,所以你只能使用不超过 1MB 的内存把鸡排一个一个 检查过去,并且输出少的那种的编号。

给你多个数(<=5e6),采用交互库的方式读入,并且在读入完之前不知道有多少个数,空间只有1M也保存不了。这些数里面有一种数个数比其他数都少,并且其他数的出现次数保证相等且>=2,种数也>=2,求少的这种数。

考虑二进制,先记录头两个出现的数,如果出现次数不同,那么输出出现次数少的,否则知道了其他数的出现次数,设为b。

那么对于二进制的每一位记录编号包含这一位的数的个数。如果要求的数包含这一位显然个数不能整除b,否则能够整除。枚举位数统计即可。

传统题

ysy 是一位优秀的炉石传说玩家。在 2033 年一次更新中,炉石新出了一张 10 费卡,它的效果如下: 检验对方场上的随从的生命值,求出最长连续相同的一段的长度,并对英雄造成等于这个长度的伤害。

ysy 觉得这张卡十分垃圾。假设对面场上有 n 个随从,生命值为 [1, m] 的整数,那么他想知道这张 卡在所有情况下能打出的伤害之和。

他当然会算了,但是他想让你检验一下。由于答案可能会很大,对输入的质数 p 取模。

一句话题意:你需要求出所有长度为 n 的,每个元素为 [1, m] 的整数的 mn 个序列的最长连续相同 子段长度之和。

最长连续相同子段长度就是最长的所有数都相同的一段的长度,例如 {1, 2, 3, 4, 3, 2, 2, 4, 4, 4, 5} 最 长连续相同子段长度为 3。

考虑枚举答案,

\[\begin{aligned} ans&=\sum_{i=1}^n i*G(i)\\ &=\sum_{i=1}^n G(ans\geq i)\\ &=\sum_{i=1}^n(m^n-G(ans<i)) \end{aligned} \]

\(F(i)=\sum_{j\leq i}G(i)\),考虑计算\(\sum_{i=0}^{n-1} F(i)\),枚举分成了j段并且容斥出现个几个>i的段。第一段有m种颜色可以选,其他段的颜色不能和上一段相同,那么

\[\begin{aligned} \sum_{i=0}^{n-1} F(i)&=\sum_{i=0}^{n-1}\sum_{j=1}^n m*(m-1)^{j-1}\sum_{k=0}^j(-1)^k{k\choose j}{n-ik-1\choose j-1}\\ &=m\sum_{i=0}^{n-1}\sum_{j=1}^n (m-1)^{j-1}(-1)^k\sum_{k=0}^j{k\choose j}{n-ik-1\choose j-1}\\ &=m\sum_{i=0}^{n-1}\sum_{k=0}^n(-1)^k\sum_{j=k}^n(m-1)^{j-1}{k\choose j}{n-ik-1\choose j-1}\\ &=m\sum_{i=0}^{n-1}\sum_{k=0}^n(-1)^k\frac{1}{n-ik}\sum_{j=k}^n(m-1)^{j-1}{k\choose j}{n-ik\choose j}j\\ \end{aligned} \]

考虑后面的

\[\sum_{j=k}^n(m-1)^{j-1}{k\choose j}{n-ik\choose j}j \]

这能快速算的话就可以枚举ik了。讨论组合意义,有\(n-ik\)个球,我们先从中选出 \(j\) 个,再从选出的 \(j\) 个中选出 \(k\) 个。在 \(j\) 个球中我们选出一个特殊的球,对于剩下的球用 \(m-1\) 种颜色染色。

考虑讨论这个特殊的球是不是这 \(k\) 个球中的,那么我们可以把它改成:有 \(n-ik\) 个球,我们从中选出 \(k\) 个。接下来分两种情况:

  1. \(k\) 个中选出一个特殊的球,把 \(k\) 个球中不特殊的用 \(m-1\) 种颜色染色。在剩下的(\(n-ik-k\) 个)球中选出一个子集,用 \(m-1\) 种颜色染色。这种方案数是\(k*(m-1)^{k-1}m^{n-ik-k}\)

  2. \(k\) 个球用 \(m-1\) 种颜色染色。在剩下的( \(n-ik-k\) 个)球中选出一个特殊的球,在其他剩下的( \(n-ik-k-1\) 个)球中选出一个子集用 \(m-1\) 种颜色染色。这种是\((m-1)^k(n-ik-k)m^{n-ik-k-1}\)

最后再乘上\(n-ik\choose k\),那么枚举k和ik即可。

posted @ 2020-06-09 09:43  lcyfrog  阅读(148)  评论(0编辑  收藏  举报