题目链接如下:
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=448&page=show_problem&problem=4471
我的代码如下:
#include <iostream>
#include <string>
#include <map>
// #define debugstruct arr{int len;std::map<int, int> mp;
};
std::string s;
int bug;
std::map<std::string, arr> 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 debugfreopen("0.txt", "r", stdin);freopen("1.txt", "w", stdout);#endifwhile (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 debugfclose(stdin);fclose(stdout);#endifreturn 0;
}