WA 70pts可能是什么原因
查看原帖
WA 70pts可能是什么原因
370723
ldgeng楼主2022/4/27 20:36

如标题,民间数据都过了,官方70pts,5 9 10三个点WA

#include <iostream>
#include <map>
#include <set>
#include <string>
using namespace std;

map<string, string> CodeMacroMapping;
set<string> CodeMacroSet;
string CodeLineString;
unsigned short CodeLineCount;

bool isIdentifier(char Character) {
	return Character >= '0' && Character <= '9' || Character >= 'A' && Character <= 'Z' || Character >= 'a' && Character <= 'z' || Character == '_';
}

string doSolve(const string &CodeCurrent) {
	string SolveResult;
	for (unsigned short CodeCharacter = 0, CodeIdentifier = 0;CodeCharacter < CodeCurrent.size();CodeCharacter = CodeIdentifier) {
		for (;CodeIdentifier < CodeCurrent.size() && !isIdentifier(CodeCurrent[CodeIdentifier]); ++CodeIdentifier);
		SolveResult += CodeCurrent.substr(CodeCharacter, CodeIdentifier - CodeCharacter);
		CodeCharacter = CodeIdentifier;
		for (;CodeIdentifier < CodeCurrent.size() && isIdentifier(CodeCurrent[CodeIdentifier]); ++CodeIdentifier);
		string CodeIdentifierCurrent = CodeCurrent.substr(CodeCharacter, CodeIdentifier - CodeCharacter);
		if (CodeMacroMapping.count(CodeIdentifierCurrent) && !CodeMacroSet.count(CodeIdentifierCurrent)) {
			CodeMacroSet.insert(CodeIdentifierCurrent);
			CodeMacroMapping[CodeIdentifierCurrent] = doSolve(CodeMacroMapping[CodeIdentifierCurrent]);
			SolveResult += CodeMacroMapping[CodeIdentifierCurrent];
			CodeMacroSet.erase(CodeIdentifierCurrent);
		} else SolveResult += CodeIdentifierCurrent;
	}
	return SolveResult;
}

int main() {
	cin >> CodeLineCount;
	cin.get();
	for (unsigned short CodeLine = 1;CodeLine <= CodeLineCount;++CodeLine) {
		getline(cin, CodeLineString);
		if (CodeLineString.substr(0, 2) == "#d") {
			if (CodeLineString.find(' ', 8) == string::npos)
				CodeMacroMapping[CodeLineString.substr(8)] = "";
			else {
				CodeMacroMapping[CodeLineString.substr(8, CodeLineString.find(' ', 8) - 8)] = CodeLineString.substr(
						CodeLineString.find(' ', 8) + 1);
			}
		} else if (CodeLineString.substr(0, 2) == "#u")
			CodeMacroMapping.erase(CodeLineString.substr(7));
		else cout << doSolve(CodeLineString);
		cout << '\n';
	}
	return 0;
}
2022/4/27 20:36
加载中...