发现题目将 kk 个数取平均数后合并成一个数的操作可以看作一棵 kk 叉树,每一个节点的儿子数都是 00kk

其中叶子节点是 0011 表示给定的 n+mn+m 个数,而非叶子节点的值就是其儿子的平均值,代表在操作后新产生的点。

假设所有的叶子节点从左到右排列的值依次是 a1,a2,,an+ma_1,a_2,\cdots ,a_{n+m},那么对于第 ii 个叶子节点其贡献可以写作 aikdep(i)\dfrac{a_i}{k^{dep(i)}},其中 dep(i)dep(i) 表示第 ii 个叶子节点的深度(dep(rt)=0dep(rt)=0)。所以在确定了 aa 数组之后,剩余平均值就是 i=1naikdep(i)\sum\limits_{i=1}^n \dfrac{a_i}{k^{dep(i)}}

dd 为有 n+mn+m 个点的 kk 叉树的深度的最大值,容易得到 d=n+m1k1d=\dfrac{n+m-1}{k-1}

因为对于 i[1,n+m]N\forall i\in[1,n+m]\cap\mathbb{N} 满足 kdep(i)kdk^{dep(i)}\mid k^{d},所以答案答案一个可以写成 Skd\dfrac{S}{k^{d}} 的形式,其中 SS 是一个整数。

发现直接统计答案会有重复,因为如果第 xx 层有 kk11,那么其贡献等于在 x1x-1 层有 1111,考虑将这 kk11 合并上去。注意,这 kk11父亲不一定是相同的

考虑对于所有一层出现的 11 超过 kk 次的情况全部处理掉,假设处理了 ll 次,那么 mml×(k1),ddlm'\gets m-l\times(k-1),d'\gets d-l

注意 dd' 表示的 n+mn+m' 个点可以组的 kk 叉树的最大深度,虽然可以构造出进行一次操作之后树的深度不减小的情况,但是这一定不是深度最深的情况。

如果将 SS 看作一个 dd 进制数,上面的操作就相当于给 SS 进行进位操作。

假设现在的答案可以写作 Skd\dfrac{S'}{k^{d'}},另 vvSS' 写作 dd' 进制数之后各位的值的和,那么需要满足 v=mv=m',也就是满足 vm(modk1)v \equiv m \pmod{k-1}

考虑使用 DP 进行求解方案数,设 fi,jf_{i,j} 表示一共 ii 层一共选择了 jj11 的方案数,模拟背包直接进行转移即可,时间复杂度为 O(n2)O(n^2)

Submission #58023415 - Japan Russia Exchange Programming Contest 2017