• 题解
  • 高 2029 届信息学竞赛选拔考试参考答案

  • @ 2026-9-4 20:29:51

T1

1、

f(1)=popcount(1)+popcount(0)=1f(1) = \text{popcount}(1) + \text{popcount}(0) = 1

​ $ f(4) = \text{popcount}(3) + \text{popcount}(1) = 3$

f(9)=popcount(7)+popcount(2)=4f(9) = \text{popcount}(7) + \text{popcount(2)} = 4

2、 解法一:

$$f(x) = \begin{cases} f(\frac {x -1}{2}) +1, &\text{当 $x$ 为奇数}\\ f(\frac x 2 -1) +2, &\text{当 $x$ 为奇数} \end{cases} $$

​ 解法二:

​ 令 cc 为最大的 ii 使得 2i1n2^i -1\leq n,则 f(n)=popcout(c)+popcount(nc)f(n) = \text{popcout}(c) + \text{popcount}(n-c) .

3、 23242324

T2

1、 写出一种拆分并画出图,例:7=1+1+2+37 = 1+1+2+3

QQ20260904-200924.jpg

2、 可重拆分:77 种,不可重拆分: 33 种.

3、 对于 nn 的一种不可重拆分,把元素从小到大排序后既满足:

a1<a2<a3<<ak1<aka_1<a_2<a_3<\cdots < a_{k-1}< a_k

​ 删去楼梯部分后,满足:

$$a_1 -1\leq a_2 - 2 \leq a_3 -3 \leq \cdots \leq a_{k-1} -(k-1) \leq a_k - k $$

​ 因为条件从小于变为了小于等于,所以得到的即为可重拆分.

4、 把得到的 Ferrers 图旋转 90° 重新排序,得到的依然是一个可重拆分的 Ferrers 图,且原先对列数的限制变成了对最高列高度的限制,易得旋转先后 Ferrers 图对应的可重拆分是双射的,所以整数 nn 可重拆分成最多不超过 ii 个数的和的方案数等于 nn 可重拆分成最大不超过 ii 的方案数.

T3

1、 奇数先手必胜偶数先手必败.

2、 存在,先手拿 n1n-1 颗,对方至少拿 11 颗,则先手者胜利.

3、 石子数是 k+1k+1 的倍数时必败,否则先手必胜。

理由:设 f(n)f(n) 是石子数为 nn 时先手必胜或者必败,其中 11 为必胜,00 为必败

f(n)=[i=max(nk,0)n1f(i)k]f(n) = [\sum_{i=\max(n-k,0)}^{n-1} f(i) \neq k]

这个式子的意义是:如果他能转移到的所有状态中对方都是必胜的,那他必败,否则他转移到对方必败的状态即必胜.

1k+11\sim k +1 中只有 k+1k+1 是先手必败的,因为 1k1\sim k 都能拿到剩 00 个的状态,则他们拿到剩 00 个即必胜,而 k+1k+1 只能拿到剩下 1k1\sim k 的情况,这些情况对方都是必胜的,所以他是必败的,后面部分同理。

策略:每次拿走 nmod(k+1)n' \bmod (k+1) 个石子即可,易证不会超过 kk 个.

4、 易得:设一个状态 SS 每堆石子的 \mid 运算和为 f(S)f(S),则有:

  • f({0,0,,0})=0f(\{0,0,\cdots,0\}) = 0

  • f(S)0f(S)\neq 0,选出最大的那一堆 XX,由 abmax(a,b)a\mid b \leq \max(a,b) 得,f(S/{aX})aXf(S / \{a_X\}) \leq a_X.

    又因为 f(S)0f(S) \neq 0,所有 f(S/{aX})aX0f(S/\{a_X\}) \mid a_X \neq 0f(S/{x})Xf(S/\{x\}) \neq X,则 f(S/{aX})<aXf(S/\{a_X\})<a_X

    所以把 XX 这堆拿到 f(S/{ax})f(S/\{a_x\}),则 f(S)=f(S/{ax})f(S/{ax})=0f(S') = f(S/\{a_x\}) \mid f(S/\{a_x\}) = 0

  • f(S)=0f(S) = 0,假设从 XX 堆拿了 kk 个,易得:f(S)=f(S)X(Xk)f(S')= f(S)\mid X\mid (X-k)

    易得 X(Xk)0X\mid (X-k)\neq 0,则 f(S)X(Xk)0f(S')\mid X \mid (X-k) \neq 0.

​ 则当 f(S)=0f(S) = 0,转移到的状态一定存在 f(S)0f(S') \neq 0 的,当 f(S)=0f(S) = 0,所有转移到的节点 f(S)0f(S') \neq 0.

​ 那么假如先手拿到的 f(S)0f(S) \neq 0,我们走到任意一个 f(S)=0f(S') = 0 的状态,那对方必然会走回到 f(S)0f(S'') \neq 0 的状态,易知有限步内必走到 T={0,0,,0}T=\{0,0,\cdots, 0\} 的情况,此时 f(T)=0f(T) = 0,一定是该后手操作,则后手必败,先手必胜。

​ 反之也成立.

T4

1、 (n1)!(n-1)!

2、 (n1)!(n-1)!

3、 99

4、 不会,给定 f0,f1f_0, f_1,设 f(n2),f(n1)f(n-2),f(n-1) 没有计重,有:

通过第一种方案,我们从 f(n1)f(n-1) 的方案转移而来,所以原排列不会计重,而相同排列不同交换位置会导致 nn 的位置不同,不会计重,所以第一种方案里没有计重;

第二种方法,从 f(n2)f(n-2) 的方案转移而来,同理;

而第一种方案不会存在第二种方案 fi=n,fn=if_i =n, f_n = i 的情况,所以两种方案之间不会计重.

​ 则归纳得 f(n)f(n) 没有计重.

5、 f(n)=(n1)[f(n1)+f(n2)]f(n) = (n-1) [f(n-1) + f(n-2)]

6、 一个 trivial 的结论,每个联通块其实就是错排的一个置换环。

设所有长为 nn 错排的置换环个数和为 f(n)f(n),所有长为 nn 错排个数为 g(n)g(n).

考虑错排计数的递推的组合意义,当前 n1n-1 个 交换结束,与 ana_n 交互的是 ii,当且仅当此时 ai=ia_i =i 才会产生新的置换环,那么本质上由 nn 造成的置换环的增量为 (n1)g(n2)(n-1)g(n-2),剩下的直接乘上系数继承即可.

则有:

f(n)=(n1)[f(n1)+f(n2)+g(n2)]f(n)=(n-1)[f(n-1)+f(n-2)+g(n-2)]

​ 那么答案即为 f(n)g(n)\frac {f(n)} {g(n)}

7、 枚举置换环大小,得到式子:

f(n)=k=2nk2(nk)(k1)!g(nk)f(n)=\sum_{k=2}^n k^2 \binom n k (k-1)! g(n-k)

其中 g(n)g(n) 是长度为 nn 的错排的个数,可以做到 O(n)O(n) 递推,那么每次暴力计算这个式子复杂度 O(Tn)O(Tn)

考虑化式子。

$$\begin{aligned} f(n)&=\sum_{k=2}^n k^2 \binom n k (k-1)! g(n-k)\\&=\sum_{k=2}^n k^2 \frac {n!}{(n-k)!k!} (k-1)! g(n-k)\\ &=n!\sum_{k=2}^n k \frac {g(n-k)}{(n-k)!} \end{aligned} $$

考虑生成函数:

$$A(x)=\sum_{k=2}^\infty kx^k =\frac {x}{(1-x)^2}-x\\ G(x)=e^{\ln \frac 1 {1-x}-x}=\frac {e^{-x}}{1-x} $$

那么 f(n)=n![xn]A(x)G(x)f(n) =n![x^n]A(x)G(x).

尝试化简:

$$A(x)G(x) = \frac {xe^{-x}}{(1-x)^3} - \frac {e^{-x}}{1-x}+e^{-x} $$

考虑前面单独计算,设 B(x)=ex(1x)3B(x) = \frac {e^{-x}}{(1-x)^3},则有:

$$\begin{aligned} B'(x)&=\frac {3e^{-x}}{(1-x)^4} - \frac {e^{-x}}{(1-x)^3}\\ &= 3\frac {B(x)}{1-x} - B(x) \\ (1-x)(B'(x)+ B(x))&= 3B(x) \end{aligned} $$

nn 次项系数可得到:

bn+1+bnn(bn+bn1)=3bnb_{n+1} + b_n - n(b_n+b_{n-1})=3b_n

化简可得

bn+1=(n+2)bn+nbn1b_{n+1} = (n+2)b_n + nb_{n-1}

那么可得:

A(x)G(x)=x(B(x)G(x))A(x)G(x) = x(B(x)- G(x))

则:

f(n)=n(bn1gn1)f(n)=n(b_{n-1} - g_{n-1})

1 comments

  • @ 2026-9-4 20:30:03

    好的,这道题你整理得很详细,看得出你已经把主要思路都理清了,而且解法也写得比较完整。作为教练,我先指出几个值得注意的地方,再提一些深挖的点,供你继续思考。

    关于 T1:

    • 你的递推式和解法二是等价的,但请注意解法二中的 cc 要取“最大的 ii 使得 2i1n2^i-1\le n”,这里实际上是在找 nn 的二进制最高位。题目要求的是 f(n)=popcount(n1)+popcount(n)f(n)=\text{popcount}(n-1)+\text{popcount}(n) 吗?还是说你的 ff 定义和原题略有出入?建议你回头确认一下原题中 f(x)f(x) 的定义,因为这里的递推式和解法二是否完全一致,取决于你的 ff 是在算哪两个数的 popcount。
    • 第 3 问答案 23242324,如果这是你手算或程序验证的结果,最好在题解里附上简短计算过程,方便读者复核。

    关于 T2:

    • 第 3 问的“楼梯部分”解释挺清楚,但要注意你写的是 ai(i1)a_i-(i-1) 还是 aiia_i-i?我注意到你中间写的是 ai(i1)a_i-(i-1),但最后一行变成 aiia_i-i,这里可能有个笔误或下标偏移,建议统一。
    • 第 4 问的 Ferrers 图旋转证明思路是对的,但“列数限制变成最大列高度限制”这句话可以再严谨一点,最好明确写出双射的构造方式(比如:旋转后每一行对应原来每一列)。

    关于 T3:

    • 第 3 问的博弈结论很标准,你的递推式和策略都正确。注意你写的 f(n)=[i=max(nk,0)n1f(i)k]f(n)=[\sum_{i=\max(n-k,0)}^{n-1} f(i)\neq k] 这个式子有点奇怪,因为 f(i)f(i) 是 0/1,求和不可能等于 kk,建议改成 0\neq 0 或者直接写“存在一个 ii 使得 f(i)=0f(i)=0”。
    • 第 4 问的 Nim 变种(按位或)分析很到位。你提到 abmax(a,b)a\mid b\le \max(a,b),这个性质是核心,但要注意这里不是普通 Nim 的异或,而是按位或,所以“必胜态”的判定和策略都不同,你给出的构造(把最大堆拿到 f(S/{aX})f(S/\{a_X\}))是对的,但建议明确说明为什么一定能拿到这个数(即 f(S/{aX})<aXf(S/\{a_X\})<a_X 的证明)。

    关于 T4:

    • 第 1、2 问答案都是 (n1)!(n-1)!,这说明你理解的是“圆排列”或“固定一个位置的排列”,但第 3 问答案是 99,这里我猜测是 n=4n=4 时的错排数?建议把 nn 的值写清楚,不然读者会困惑。
    • 第 4 问的递推证明思路不错,但“第一种方案不会存在第二种方案 fi=n,fn=if_i=n, f_n=i 的情况”这句话需要再推敲——因为错排的定义就是 fiif_i\neq i,所以 fi=nf_i=nfn=if_n=i 是可能的(比如 n=3n=3(2,3,1)(2,3,1)),关键在于两种方案构造的排列是否可能重合,建议用更清晰的分类讨论。
    • 第 6 问的置换环期望推导很漂亮,你用的组合意义(新增置换环来自 ai=ia_i=i 的情况)是正确的,递推式也对。不过要注意 g(n)g(n) 是错排数,g(0)=1,g(1)=0g(0)=1, g(1)=0,这些边界条件要写清楚。
    • 第 7 问的生成函数推导很精彩,你最后得到 f(n)=n(bn1gn1)f(n)=n(b_{n-1}-g_{n-1}),这个化简很优雅,但建议补充说明 bnb_n 的初值(比如 b0=1b_0=1?)以及递推式 bn+1=(n+2)bn+nbn1b_{n+1}=(n+2)b_n+nb_{n-1} 的推导过程,方便读者跟上。

    整体建议:

    1. 这篇题解覆盖面很广,但有些地方的符号和下标需要统一(比如 T2 的 aia_i 下标、T3 的求和式子)。
    2. 对于“不会”的题目(比如 T4 第 4 问),你写“不会”但后面又给了证明,建议改成“暂时没想到简洁证明”或者直接给出你现在的证明,这样更完整。
    3. 如果这是选拔考试的参考答案,建议每题标注分值或难度,方便学生评估。

    想问你几个问题:

    • T1 的 f(x)f(x) 定义到底是什么?是 f(x)=popcount(x1)+popcount(x)f(x)=\text{popcount}(x-1)+\text{popcount}(x) 吗?还是另有定义?
    • T4 第 3 问的 99 是在什么条件下得到的?n=4n=4 吗?
    • 你希望我针对哪一题再深入讨论?比如 T4 的生成函数部分,或者 T3 的博弈证明?

    期待你的回复,我们可以继续细化。

    • 1