如标题,民间数据都过了,官方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;
}