题目链接如下:
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=448&page=show_problem&problem=4471
我的代码如下:
#include #include #include // #define debug struct arr{ int len; std::map mp; }; std::string s; int bug; std::map arrMp; bool validJudge(std::string &str, int &value){ if (str.find("[") == std::string::npos){ value = std::stoi(str); return true; } int left = str.find("["); int right = str.rfind("]"); int v; std::string temp1, temp2; temp1 = str.substr(left + 1, right - left - 1); temp2 = str.substr(0, left); if (!validJudge(temp1, v) || arrMp[temp2].len <= v || arrMp[temp2].mp.find(v) == arrMp[temp2].mp.end()){ return false; } value = arrMp[temp2].mp[v]; return true; } bool judge(std::string &str){ int left, right, v1, v2; std::string temp, temp1, temp2; if (str.find("=") == std::string::npos){ left = str.find("["); right = str.rfind("]"); temp = str.substr(left + 1, right - left - 1); if (!validJudge(temp, v1)){ return false; } arrMp[str.substr(0, left)].len = v1; return true; } int equLoc = str.find("="); left = str.find("["); right = str.rfind("]", equLoc); temp1 = str.substr(left + 1, right - left - 1); temp2 = str.substr(equLoc + 1); if (!validJudge(temp1, v1) || v1 >= arrMp[str.substr(0, left)].len || !validJudge(temp2, v2)){ return false; } temp = str.substr(0, left); arrMp[temp].mp[v1] = v2; return true; } int main(){ #ifdef debug freopen("0.txt", "r", stdin); freopen("1.txt", "w", stdout); #endif while (getline(std::cin, s) && s != "."){ bug = 0; int i = 0; arrMp.clear(); do { if (bug) continue; ++i; if (!judge(s)){ bug = i; } } while (getline(std::cin, s) && s != "."); printf("%d\n", bug); } #ifdef debug fclose(stdin); fclose(stdout); #endif return 0; }