哞叫时间
题目链接:https://www.acwing.com/problem/content/description/6126/
题意:
给定一个长度为n的字符串,规定若该字符串一个abb形式的子串数量大于等于f,则满足条件
现在允许字符串改变任意一个字符(或者不改变),求可能满足条件的子串
思路:
按照答案枚举,即先枚举abb类型的字符串共有26x25种
再遍历ss,原先就匹配上的用占位符覆盖。
如果满足条件的子串数量>=f,不用改变任意一个字符 该字串都满足条件
<f-1,即使改变一个字符,也匹配不上,该字符不满足条件
==f-1时
再遍历观察是否能够匹配到ab,ab,ab*,(三个位置都不能被占位符填充)若能,该字符串加入到答案中
#include<bits/stdc++.h> #define rep(i,a,n) for(int i=a;i<=n;i++) #define pb push_back #define endl "\n" #pragma GCC optimize(3) using namespace std; typedef long long ll; typedef pair<int,int> pii; const int inf=0x3f3f3f3f; const ll llmax=LLONG_MAX; const int maxn=1e5+5; const int mod=1e9+7; int n,f; string s; string ss; bool check(string k,int i){ if(ss[i]==k[0]&&ss[i+1]==k[1]&&ss[i+2]==k[2])return true; return false; } signed main() { ios::sync_with_stdio(false),cin.tie(0); cin>>n>>f; int res=0; vector<string>ans; vector<string>x; for(int i=0;i<26;i++){ char c1='a'+i; for(int j=0;j<26;j++){ char c2='a'+j; if(c1!=c2){ string k;k+=c1;k+=c2;k+=c2; x.pb(k); } } } string s;cin>>s; s=" "+s; for(int j=0;j<x.size();j++){ ss=s; string p=x[j]; int cnt=0; rep(i,1,n-2){ if(check(p,i)){ cnt++; ss[i]='#'; ss[i+1]='#'; ss[i+2]='#'; } } if(cnt>=f){ res++; ans.pb(p); }else if(cnt<f-1)continue; else{ bool f=false; rep(i,1,n-2){ if(ss[i]=='#'||ss[i+1]=='#'||ss[i+2]=='#')continue; if((ss[i+1]==p[1]&&ss[i+2]==p[2])||(ss[i]==p[0]&&ss[i+2]==p[2])||(ss[i]==p[0]&&ss[i+1]==p[1])){ f=true; break; } } if(f){ res++; ans.pb(p); } } } cout<<res<<endl; sort(ans.begin(),ans.end()); for(int i=0;i<ans.size();i++){ cout<<ans[i]<<endl; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现