首页 > 代码库 > HDU1022 Train Problem I 栈的模拟
HDU1022 Train Problem I 栈的模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042
栈的模拟,题目大意是已知元素次序, 判断出栈次序是否合理。 需要考虑到各种情况, 分类处理。
常见错误:使用前未清空栈
使用STL思路较为清晰
代码附上, 欢迎各位大神指点~~
#include <cstdio>#include <stack>#include <iostream>#include <vector>using namespace std;stack<char> s;const int maxn = 1000 + 100;char in[maxn], out[maxn]; //记录栈的原始次序, 出栈次序vector<string> str; //用以记录元素出入过程int solve(int n){ int A = 0, B = 0; while(B < n){ if(in[A] == out[B]){ s.push(in[A++]); str.push_back("in"); s.pop(); B++; str.push_back("out"); } else if(!s.empty()&&s.top() == out[B]){ s.pop(); str.push_back("out"); B++; } else if(A < n){ s.push(in[A++]); str.push_back("in"); } else return 0; } if(s.empty()) return 1; else return 0; }void print(){ for(vector<string>::iterator i = str.begin(); i != str.end(); i++){ cout << *i << endl; }}int main(){ int n; while(~scanf("%d", &n)){ getchar(); str.clear(); memset(in, 0, sizeof(in)); memset(out, 0, sizeof(out)); while(!s.empty()) s.pop(); scanf("%s%s", in, out); if(solve(n)){ printf("Yes.\n"); print(); printf("FINISH\n"); } else{ printf("No.\n"); printf("FINISH\n"); } } return 0;}
HDU1022 Train Problem I 栈的模拟
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。