1 条题解

  • 0
    @ 2025-8-24 22:48:52

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar liruixiong0101
    当我们身陷无尽黑暗,不妨努力绽放光亮,搏一搏,让别人看到我们身上的微光,这是给予彼此的希望。

    搬运于2025-08-24 22:48:52,当前版本为作者最后更新于2023-08-04 21:22:37,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    P0 题意:

    给定一个长度为 nn 的数组 a1,a2,,ana_1,a_2,\dots,a_n,请问是否有一个数 lll[1,n)l\in[1,n)),[1,l][1,l][l+1,n][l+1,n] 子序列,或 [l+1,n][l+1,n][1,l][1,l] 的子序列,若有所有的 ll 都合法输出 NO 否则输出 YES

    P1 思路:

    1.暴力:

    暴力思路很明显,枚举 ll,再 O(n)O(n) 判断这个 ll 是否合法即可,判断 ll 是否合法可以用双指针实现。

    2.正解:

    我们来自己手算一下第一个样例,我们会发现当 ln2l\ge \lfloor \frac{n}{2} \rfloor 时,每一个 ll 都可行,为什么呢?

    • l=3l=3 时,两个序列分别为 1 2 12 1,此时 2 11 2 1 的子序列。
    • l=4l = 4 时,两个序列分别为 1 2 1 21,此时第一个序列增加了一个 2,而第二个序列减少了一个 21 也为 1 2 1 2 的子序列。

    研究完样例,我们很容易发现一个性质:
    bb 序列为 aa 序列的子序列,那么在 bb 序列中去掉一个元素 cc,在 aa 序列中增加此元素 ccbb 序列还为 aa 序列的子序列。

    我们从子序列的定义入手:

    若一个序列 aa 可以通过删除任意数量元素(可以为 00 个),从而让序列 aa 变为另一个序列 bb,那么称 bbaa 的子序列。

    很明显,我们在 bb 序列中删除元素不会影响 bbaa 的子序列这一条件,同样,我们在 aa 序列中增加一个元素也不会影响此条件。这样我们得到了上述性质:若 bb 序列为 aa 序列的子序列,那么在 bb 序列中去掉一个元素 cc,在 aa 序列中增加此元素 ccbb 序列还为 aa 序列的子序列。

    同理,我们可以得出一下结论:

    • l=n2l=\lfloor\frac{n}{2}\rfloor 时,这个 ll 成立,那么 ln2l\ge\lfloor\frac{n}{2}\rfloor 所有的 ll 都成立。
    • l=n2l=\lceil\frac{n}{2}\rceil 时,这个 ll 成立,那么 ln2l\le\lceil\frac{n}{2}\rceil 所有的 ll 都成立。

    所以我们只需判断 l=n2l=\lfloor\frac{n}{2}\rfloorl=n2l=\lceil\frac{n}{2}\rceilll 是否合法即可,判断 ll 是否合法与暴力判断相同。

    P3 代码:

    代码很简单,这里只提供 AC 记录了。
    https://www.luogu.com.cn/record/119061135

    • 1

    信息

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