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