题目链接:https://codeforces.com/contest/1379/problem/A
题目描述:
对于一个字符串判断能否通过将“?”替换为字母,从而使得字符串中出现仅一次“abacaba”
解题思路:
第一次for循环枚举目标字符串的起点,第二层for循环是用来消去‘?’的,然后每次消完‘?’都check一遍字符串中是否只有一个“abacaba”。
代码:
#include <bits/stdc++.h>
using namespace std;
string a="abacaba";
bool check(string s)
{
int cnt=0;
for (int i=0;i<(int)s.size()-6;i++)
cnt+=(s.substr(i,7)==a);
return (cnt==1);
}
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
string s,ans="No";
cin >> n >> s;
for (int i=0;i<n-6;i++)
{
string tmp=s;
for (int j=0;j<n;j++)
{
if (tmp[j]=='?')
{
if (j>=i && j-i<7)
tmp[j]=a[j-i];
else
tmp[j]='d';
}
}
if (check(tmp))
ans="Yes\n"+tmp;
}
cout << ans << endl;
}
}
京公网安备 11010502036488号