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

mac2026-08-18  2

题目 错因:暴力直接超时,以为会用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; }
最新回复(0)