题目
错因:暴力直接超时,以为会用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;
}