是蒟蒻来作死的,一不小心80pts高兴坏了(但是100pts才是最赞的所以就来求助了
其实核心就是存找取,莫得了。
#include<bits/stdc++.h>
using namespace std;
string num_str,wordbook_code[110],wordbook_ans[110];
int n,c_num,isFindout,codes[5000000];
void output(){
for(int i = 0;i < c_num - 1;i++)
cout << wordbook_ans[codes[i]] << " ";
cout << wordbook_ans[codes[c_num - 1]];
return;
}
void translating(int left){
if(isFindout) return; //摆烂到底
if(left >= num_str.size()){
//找到了,摆烂
output();
isFindout++;
return;
}
for(int i = 1;i <= n;i++){
//遍历判断且继续
if(wordbook_code[i] == num_str.substr(left,wordbook_code[i].size())){
codes[c_num++] = i;
translating(left + wordbook_ans[i].size());
if(isFindout) return;
}
}
//到头了,删除锚点
codes[c_num--] = 0;
return;
}
string num_turning(string a){
//字母打进来,数字输出去
string b;
for(int i = 0;i < a.size();i++){
int sub = int(a[i]) - 32;
if(65 <= sub && sub <= 67) b = b + "1";
if(68 <= sub && sub <= 70) b = b + "2";
if(71 <= sub && sub <= 73) b = b + "3";
if(74 <= sub && sub <= 76) b = b + "4";
if(77 <= sub && sub <= 78) b = b + "5";
if(79 <= sub && sub <= 81) b = b + "6";
if(82 <= sub && sub <= 84) b = b + "7";
if(85 <= sub && sub <= 87) b = b + "8";
if(88 <= sub && sub <= 90) b = b + "9";
}
return b;
}
int main(){
cin >> n;
cin >> num_str;
for(int i = 1;i <= n;i++){
//单词和代码的转义
cin >> wordbook_ans[i];
wordbook_code[i] = num_turning(wordbook_ans[i]);
}
translating(0);
}
卡的点在#3和#8,求大佬出手相救~