1 条题解

  • 0
    @ 2025-8-24 22:56:45

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar s4CRIF1CbUbbL3AtIAly
    僕だって空を飛べる / 雲になっていく / 風になっていく / いつかはみんな / 星になっていく

    搬运于2025-08-24 22:56:45,当前版本为作者最后更新于2023-12-23 15:54:38,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题意:Ω(S)\Omega(S) 为集合 SS 的所有非空子集的元素和所组成的集合,构造使得 Ω(S)|\Omega(S)| 最小的 SS

    观察样例并不能得到什么很好的结果,因此开始手动构造。

    简单构造一会发现对于大小为 nn 的集合,最优的情况大概就是 n2n2-\frac n2\sim\frac n2 所有整数。当然这里可以统一缩放。

    众所周知想要证明一个东西的最小值就是先找到一个下界满足所有可能值都不会小于它,之后给出一个值为下界的构造。现在我们猜测这个情况就是下界,考虑证明。

    首先我们注意到 00 非常厉害,它可以使集合增加一个元素并且不影响答案。于是接下来的证明分成两部分。

    1. 如果集合中不含 00

    假设这个集合中的元素为 a1<a2<<ak<0<ak+1<ak+2<<ana_1<a_2<\dots<a_k<0<a_{k+1}<a_{k+2}<\dots<a_n

    于是,我们发现下面这个巨大的式子:

    $$\begin{aligned} 0>&a_k>a_{k-1}>\dots>a_1\\ >&a_1+a_k>a_1+a_{k-1}>\dots>a_1+a_2\\ >&a_1+a_2+a_k>a_1+a_2+a_{k-1}>\dots>a_1+a_2+a_3\\ \vdots\\ >&a_1+a_2+\dots+a_k \end{aligned} $$

    其中,第一行有 kk 个数(不包括 00),第二行有 k1k-1 个数,最后一行有 11 个数。

    因此,至少有 k+(k1)++1=k(k+1)2k+(k-1)+\dots+1=\frac{k(k+1)}2 种不同的结果。

    同理,至少有 (nk)(nk+1)2\frac{(n-k)(n-k+1)}2 种不同的结果。

    因此答案至少为 k(k+1)+(nk)(nk+1)2=2k2+n22nk+n2\frac{k(k+1)+(n-k)(n-k+1)}2=\frac{2k^2+n^2-2nk+n}2

    容易发现在 kkn2\lfloor \frac n2\rfloorn2\lceil\frac n2\rceil 时答案最小。

    2. 如果集合中含 00

    假设这个集合中元素为 $a_1<a_2<\dots<a_{k-1}<a_k=0<a_{k+1}<a_{k+2}<\dots<a_n$。

    类似于上面的情况,至少有 k(k1)2\frac{k(k-1)}2结果和 (nk)(nk+1)2\frac{(n-k)(n-k+1)}2结果,以及 00

    于是答案为 $\frac{k(k-1)+(n-k)(n-k+1)}2+1=\frac{2k^2-2k+n^2-2nk+n}2+1$。

    此时 k=n+12k=\lfloor\frac{n+1}2\rfloorn+12\lceil\frac{n+1}2\rceil 时答案最小。

    比较上下两个式子,容易发现不含 00 比含 00 大了 k1k-1,而根据题目条件以及最小取值 kk 至少为 11,因此含 00 比不含 00 要更不劣。

    这样我们不仅证明完了含 00 更不劣,也顺便证明出了理论的最小值。

    构造上面已经说过了,证明时也说明了取最小值的情况。

    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cout<<(i&1?-i/2:i/2)<<" ";
    cout<<"\n";
    
    • 1

    信息

    ID
    9604
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者