安装在
dingshengyang · · 题解
这题就是大水题。
首先,因为
首先,编写一个 check 函数,用来判断当前位置合不合法。全部枚举一遍,把合法的加入一个 vector 中。注意,原本的「?」 要改成「a」,这样才能保证字典序最小。
啊这,管理说我说明太少,那我就添几句。
聊一下 check 函数的实现方法。
首先,传入一个数
if(check(i)){
string t = a;
for(int j = 0;j < b.size();j ++)t[i+j] = b[j];
for(int j = 0;j < t.size();j ++)t[j] = (t[j]=='?'?'a':t[j]);
answer.push_back(t);
}
这段属于水货中的精髓。简单说,首先做一个备份 push_back 到 vector 里,排序(string 本来就重载了字典序的小于号)。
#include<bits/stdc++.h>
using namespace std;
string a,b;
vector<string> answer;
int check(int x){
for(int i = 0;i < b.size();i ++){
if(a[x+i] == '?')continue;
if(a[x+i] != b[i])return 0;
}
return 1;
}
int main(){
cin >> a >> b;
for(int i = 0;i+b.size()-1 < a.size();i ++){
if(check(i)){
string t = a;
for(int j = 0;j < b.size();j ++)t[i+j] = b[j];
for(int j = 0;j < t.size();j ++)t[j] = (t[j]=='?'?'a':t[j]);
answer.push_back(t);
}
}
sort(answer.begin(),answer.end());
if(answer.size()==0)cout << "UNRESTORABLE" << endl;
else cout << answer[0] << endl;
return 0;
}