80pts的蒟蒻求改
查看原帖
80pts的蒟蒻求改
747369
CooooldWind_楼主2022/10/18 13:23

蒟蒻来作死的,一不小心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,求大佬出手相救~

2022/10/18 13:23
加载中...