1 条题解

  • 0
    @ 2025-8-24 21:16:45

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar CJY
    小升初蒟蒻||/article/ugxlm066/team/87748||没有一根棒棒糖解决不了的事情,如果有,就再来一根||最后在线时间:2025年8月24日20时21分

    搬运于2025-08-24 21:16:44,当前版本为作者最后更新于2024-11-17 14:59:17,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    前言

    Update in 2024/11/172024/11/202024/11/17 \sim 2024/11/20

    题目传送门

    这题似乎有坑,搞了半天!~可能对别的大佬来说很简单!~

    思路

    我们使用string提供的find函数直接搜索字符串中是否存在子串 not\texttt{not},每次让计数器自增一。

    你会获得 1010 分。

    题目中说,每一轮剪辑找到 SS 中所有子串 not\texttt{not},而我的代码中一次只找一次,所以会WA

    S=notnotS=\texttt{notnot}

    • 错误方法:第一轮结束后 S=notS=\texttt{not},第二轮结束后 SS 为空,剪辑轮数为 22
    • 正确方法:第一轮把所有 not\texttt{not} 删了,SS 为空,剪辑轮数为 11

    我们每次遍历一遍 SS,用substr判断是否有 not\texttt{not},如果有就用erase删除 not\texttt{not}

    你会获得 7070 分。

    ii 为循环变量,删除 not\texttt{not} 之后就不应该i++了,否则就会少检测一次。

    S=notnotS=\texttt{notnot}

    第一轮把 not\texttt{not} 删掉,S=notS=\texttt{not},当前 ii00,每次循环都会i++,所以 ii 变成 11 了,此时 Si=oS_i=\texttt{o},就检测不到下一个 not\texttt{not} 了。

    我们循环时不写i++,当 si,si+1,si+2nots_i,s_{i+1},s_{i+2} \ne \texttt{not} 时才i++

    如果你是像我这样写的话,你就错了:

    for(int i=0;i<s.size()-2;)
    

    你会获得 9090 分,有一个RE

    s.size()的类型是size_tsize_t只能存无符号整数,故不能存负数,当 s<2|s|<2 时,s2<0|s|-2<0,这样会溢出,并变成一个很大的整数,所以会越界。

    我们将s.size()强制转整。

    这样就 100100 分了!

    Code

    while(s.find("not")!=string::npos){
    	for(int i=0;i<(int)s.size()-2;){
    		if(s.substr(i,3)=="not") s.erase(i,3);
    		else i++;
    	}
    	c++;
    }
    

    总结

    所以我们以后要养成好习惯,尽量把s.size()强制转整。

    • 1

    信息

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