首页 > 代码库 > 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 栈的模拟