Codeforces Round #657 (Div. 2)A.Acacius and String(暴力,STL,好题)

题目链接

这次得CF真的让人自闭。。。。这题不错,很考验代码能力,利用sbustr截取字符串经行比较可以大大减小代码量。具体思路就是暴力做法,枚举给定字符串得起始位置看包括‘?’在内能否与‘abacaba’匹配,如果可以,再从开始位置检查子串的’abacaba‘是否唯一。参考了大佬的代码,STL函数一用是真的短,ORZ。

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
string p="abacaba";
int main() {
	int t;
	cin>>t;
	while(t--) {
		int n;
		string s,ans;
		cin>>n>>s;
		for(int i=0; i<=n-7; i++) {
			int flag=1;
			string ss=s;
			for(int j=0; j<7; j++)
				if(ss[i+j]!=p[j]&&ss[i+j]!='?')flag=0;
				else ss[i+j]=p[j];
			if(!flag)continue;
			for(int j=0; j<=n; j++)if(ss[j]=='?')ss[j]='z';
			for(int j=0; j<=n-7; j++)if(j!=i&&ss.substr(j,7)==p)flag=0;
			if(flag) {
				ans=ss;
				break;
			}
		}
		if(ans.empty())cout<<"No"<<endl;
		else cout<<"Yes"<<endl<<ans<<endl;
	}
}

猜你喜欢

转载自blog.csdn.net/Alanrookie/article/details/107460837