1 条题解

  • 0
    @ 2026-4-20 21:24:45

    题目详解

    问题重述

    我们需要构造一个长度为 nn 的比特串(仅含 0011),要求:

    1. 字符串中恰好包含 kk11
    2. 字符串中作为子序列出现的 101101 的数量等于 010010 的数量。

    关键观察

    直接计算任意字符串中 101101010010 子序列的数量是很困难的。
    但如果我们能构造出使得这两类子序列数量都为 00 的字符串,问题就变得非常简单。


    什么时候 101101010010 子序列数量都为 00

    一个充分条件是:字符串中所有的 11 都出现在所有的 00 之前
    也就是说,字符串形如:

    $$\underbrace{111\ldots 1}_{k\text{个}} \underbrace{000\ldots 0}_{n-k\text{个}} $$
    • 要形成 101101 子序列,需要 11 后面出现 00,然后后面再出现 11
      但如果所有 11 都在所有 00 的前面,那么一旦出现 00,后面就再也不会出现 11,因此不可能有 101101
    • 同理,要形成 010010 子序列,需要 00 后面出现 11,然后后面再出现 00
      但在这种结构中,11 后面不会再有 00,所以 010010 也不可能出现。

    因此,这种字符串的 101101010010 子序列数量均为 00,显然是“完美”的。


    直接构造

    按照上面的想法,我们可以直接构造:

    • 输出 kk11,再输出 nkn-k00

    但注意题目要求恰好 kk11。这样构造确实满足要求。

    然而,看看题目给的示例输出:

    • n=4,k=2n=4, k=2,输出是 10101010,而不是 11001100

    这说明题目允许其他构造,但我们的构造 11001100 也是正确的。
    实际上,11001100101101010010 子序列数量确实都是 00
    那么为什么示例没有用这种最简单的构造?可能是因为题目希望展示不同构造方式,但不代表我们的构造错误。


    更严谨的构造(与标程一致)

    标程给出了一种略微不同的构造,特别处理了 k=0k=0k=nk=n 的情况,以及一般情况:

    • k=0k = 0:全为 00
    • k=nk = n:全为 11
    • 否则,构造为:
      k1k-111,接着 nk1n-k-100,最后 1111

    这种构造也能保证 101101010010 子序列数量为 00,因为唯一的两个 11 在两端,中间全是 00,不会出现 1100 之后又出现 11 的模式。


    为什么示例输出不同?

    题目说“如果有多个解,输出任意一个”。
    示例输出 10101010 也是一种解,它的 101101010010 子序列数量都是 11,不是 00,但依然相等。

    我们的构造 11001100 也是正确的,而且更简单。


    最终结论

    最简单且正确的构造是:

    $$\text{ans} = \underbrace{111\ldots 1}_{k\text{个}} \underbrace{000\ldots 0}_{n-k\text{个}} $$

    这保证了 101101010010 子序列的数量均为 00,因此完美满足要求。

    如果 k=0k=0k=nk=n,这个构造自然退化到全 00 或全 11

    • 1

    信息

    ID
    6623
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    3
    已通过
    1
    上传者