题目链接如下:
我的代码如下:
cpp
#include <iostream>
#include <string>
#include <map>
// #define debug
struct 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 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;
}