题解:P11451 [USACO24DEC] It's Mooin' Time B
有点暴力的模拟做法。
观察到 moo
形式的字符串只会有 \(2\) 种字符,我们进行暴力枚举。
枚举 moo
叫的位置,分两种情况分讨:
- 理想情况,无损坏,判断即可,并记录此处已有
moo
叫。 - 坏掉了,由于只坏了一个,使用变量记录是否修复过,若没有,检查是否可修。
时间复杂度显然为 \(O(|s|^2n)\),时限 \(2\) 秒,较为可行。
#include<bits/stdc++.h>
using namespace std;
int n, m, v[20005], cnt;
string s, ans[20005];
map<string, int> mp;
int main(){
cin >> n >> m >> s;
for(char a = 'a'; a <= 'z'; a ++)
for(char b = 'a'; b <= 'z'; b ++){
if(a == b) continue;
string m1, m2; m1 = a, m2 = b;
int t = 0, sum = 0;
for(int i = 0; i < n - 2; i ++) v[i] = 0;
for(int i = 0; i < n - 2; i ++){
string x, y, z; x = s[i], y = s[i + 1], z = s[i + 2];
if(m1 + m2 + m2 == x + y + z){
v[i] = v[i + 1] = v[i + 2] = 1;
sum ++, i += 2;
}
}
for(int i = 0; i < n - 2; i ++){
if(!v[i] && !v[i + 1] && !v[i + 2]){
string x, y, z; x = s[i], y = s[i + 1], z = s[i + 2];
if(!t && (m1 + m2 + m2 == m1 + y + z || m1 + m2 + m2 == x + m2 + z || m1 + m2 + m2 == x + y + m2)){
sum ++, t = 1, i += 2;
}
}
}
if(sum >= m) ans[++ cnt] = m1 + m2 + m2;
}
cout << cnt << "\n";
for(int i = 1; i <= cnt; i ++) cout << ans[i] << "\n";
return 0;
}
分类:
题解
posted on 2025-01-11 14:18 zhangzirui66 阅读(45) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】