hdu 1022
2013-08-08 21:14
302 查看
题目大意://此题不真正的仔细读难理解出事栈的应用,容易想成反序相等就yes的问题,此题题意是说输入的两列字符串,第一列表示进入的顺序,第二列表示出去的顺序,问你是否符合后进先出。
//举出一列数据 7 1234567 4321576
//上面数据应该是 in in in in out out out out in out in in out out;
解题思路:
代码如下:
//举出一列数据 7 1234567 4321576
//上面数据应该是 in in in in out out out out in out in in out out;
解题思路:
设进出两个顺序分别为order1和order2,如果此时栈为空或者当前的栈顶元素不等于order2[i],就让order1[j]入栈,同时将"in"记录入q队列中。
else如果此时栈顶元素等于order2[i],就将此栈顶元素弹出(sk.pop()),并将"out"记录入q队列。
不断进行上面上面两个判断,直到两个数组遍历完,或者在中途中达不到目标顺序,使程序停止。
代码如下:
/* * 1022_3.cpp * * Created on: 2013年8月8日 * Author: 黄俊东 */ 总有一天我会追到章泽天的......fighting!!!! #include <iostream> #include <stack> #include <queue> using namespace std; string order1, order2; int n; void cal() { stack<char> st; queue<string> q; while (!st.empty()) { st.pop(); } int i = 0, j = 0; while (i < n && j <= n) { if (st.empty() || st.top() != order2[i]) { if (j == n) { cout << "No.\nFINISH" << endl; return; } st.push(order1[j++]); q.push("in"); } else { st.pop(); q.push("out"); i++; } } cout << "Yes." << endl; string str; while (!q.empty()) { str = q.front(); cout << str << endl; q.pop(); } cout << "FINISH" << endl; } int main() { while (cin >> n) { cin >> order1 >> order2; cal(); } return 0; }
设进出两个顺序分别为order1和order2,如果此时栈为空或者当前的栈顶元素不等于order2[i],就让order1[j]入栈,同时将"in"记录入q队列中。
else如果此时栈顶元素等于order2[i],就将此栈顶元素弹出(sk.pop()),并将"out"记录入q队列。
不断进行上面上面两个判断,直到两个数组遍历完,或者在中途中达不到目标顺序,使程序停止。
相关文章推荐
- HDU 1022 Train Problem I(栈)
- HDU 1022 火车进出站问题
- hdu 1022 Train Problem I
- HDU 1022 Train Problem I
- hdu 1022 Train Problem I
- HDU 1022 Train Problem I(栈)
- [JAVA][HDU 1022][Train Problem I]
- Hdu 1022 Train Problem I 程序参考
- hdu 1022 栈
- hdu1022 Train Problem I(STL 栈的应用)
- hdu-1022 栈、队列
- HDU 1022 Train Problem I
- hdu 1022 Train Problem I
- HDU 【1022】Train Problem I
- HDU-1022
- hdu 1022 Train problem I(栈~~)
- HDU 1022 Train Problem I
- hdu 1022(Train Problem)
- HDU 1022 Train Problem I
- HDU - 1022 Train Problem I