当前位置:首页 > 编程笔记 > 正文
已解决

1596 - Bug Hunt (UVA)

来自网友在路上 161861提问 提问时间:2023-11-04 23:43:54阅读次数: 61

最佳答案 问答题库618位专家为你答疑解惑

题目链接如下:

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;
}

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"1596 - Bug Hunt (UVA)":http://eshow365.cn/6-32246-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!