H - A Ballad about the Tear(匹配思维优化)

题目
在这里插入图片描述在这里插入图片描述
错因:暴力直接超时,以为会用KMP,结果知识简单的地优化即可
思路:若s串中有“demsond”->直接输出“”;否则,在修改位置前后各七位中查找“demsond”;思维灵活一点即可;
AC代码

#include <bits/stdc++.h>

using namespace std;
char s[100005];
//char t[6];
int main()
{
    ios::sync_with_stdio(0);
    int m,i,x,j;
    char c;
    char t[7]= {'d','e','s','m','o','n','d'};//遗忘的输入串
    cin>>s>>m;
    int len1=strlen(s);
    i=0;
    j=0;
    int flag1=0;
    while(i<len1&&j<7)
    {
        if(s[i]==t[j])
        {
            i++;
            j++;
        }
        else
        {
            i=i-j+1;
            j=0;
        }
    }
    if(j==7)
    {
        printf("I love you, Desmond!\n0\n");
        flag1=1;

    }
    if(flag1==0)
    {
        int ans=0;
        int flag=0;
        while(m--)
        {
            ans++;
            cin>>x>>c;
            s[x-1]=c;
            if(len1<7)
            {
                flag=0;
                break;
            }
            else
            {
                i=x-8,j=0;
                while(i<x+9&&j<7)//前后各七位匹配
                {
                    if(s[i]==t[j])
                    {
                        i++;
                        j++;
                    }
                    else
                    {
                        i=i-j+1;
                        j=0;
                    }
                }
                if(j==7)
                {
                    flag=1;
                    break;
                }

            }
        }
        if(flag==0) printf("Goodbye, my love!\n");
        else printf("I love you, Desmond!\n%d\n",ans);
    }
    return 0;
}
发布了90 篇原创文章 · 获赞 18 · 访问量 3376

猜你喜欢

转载自blog.csdn.net/sherry_zhen/article/details/102872716