题解: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   zhangzirui66  阅读(45)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示