1 条题解

  • 0
    @ 2025-8-24 21:15:13

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar cff_0102
    & aqua_qaq | 团子群 185800038 | 如果我死了说明我 AFO 了

    搬运于2025-08-24 21:15:12,当前版本为作者最后更新于2023-07-19 12:50:12,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    问题 11

    将字符串相加(拼接)的操作复杂度是 O(a+b)O(a+b),其中两个字符串长度分别为 aabb

    因为 n105n\le10^5,所以很可能超时。

    输出一个比较大的数,如 10510^5 即可。

    问题 22

    第二个问题,注意到 aia_i 可以取 00

    模拟一下 axa_x00 的情况。

    for (int i = 2; i <= n; ++i) pre[i] = pre[i - 1] & a[i];
    

    此时,prex=prex+1==pren=0pre_x=pre_{x+1}=\dots=pre_{n}=0

    for (int i = n - 1; i; --i) post[i] = post[i + 1] & a[i];
    

    此时,postx=postx1==post1=0post_x=post_{x-1}=\dots=post_{1}=0

    for (int i = 1; i < n; ++i) if (pre[i] + post[i + 1] == pre[n]) {
        ++ans;
    }
    

    我们知道 pren=0pre_n=0,接下来对这里的 ii 进行分讨。

    1. i<xi<xposti+1=0post_{i+1}=0,此时只有 prei=0pre_i=0ansans 会加 11
    2. ixi\ge xprei=0pre_{i}=0,此时只有 posti+1=0post_{i+1}=0ansans 会加 11

    aa 中有两个 00(假设分别是 ax,aya_x,a_yx<yx<y),且除了这两个数以外剩下的数按位与的结果不为 00 时,正确的答案是什么?正确的答案是 22,把 aa 数组分成 [1,x][1,x][x+1,n][x+1,n]。但是实际上在最终的这个循环中,xi<yx\le i<yansans 都会自增 11,此时最终程序输出的 ansans11(初始值)+yx+y-x(在 [x,y)[x,y) 中加的数)。当 yx>1y-x>1 时,程序的答案就会出错。

    构造一组数据,其中数组刚好有两个 00并且这两个 00 之间至少有一个不为 00 的数),且剩下所有数按位与的结果不为 00 即可让程序出错。

    实际上,剩下的数按位与的结果为 00(如 5\n1 0 2 0 4),甚至输入的 aa 数组不含 00(如 6\n1 1 4 5 1 4),也都有几率会使程序出错。但是只要求构造一组使程序出错的数据即可,所以不需要分析更复杂的情况。

    Python 程序代码:

    a=int(input())
    if(a==1):print(100000)
    if(a==2):print("5\n1 0 1 0 1")
    
    • 1

    信息

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