HDU1022 Train Problem I
2015-08-30 20:59
330 查看
是一道很露骨的模拟栈的题目,但是由于第一次做到,还是卡了一下的。
就是用一个stack来模拟,让进栈的序列逐个进栈,然后再每次都判断一下是否与当前出栈序列的位置符合,如果不符合就继续进栈,如果符合就出栈,弄清楚各个的标记即可。
因为如果当前的栈顶符合出栈序列的当前位置却不出栈的话,它一定会在接下来入栈的车的后面出栈,就不可能符合给定的出栈顺序。
然而题目的数据好弱,后来才发现我都忘了用题目中“车站里最多只能同时有9辆车”这个条件,但是还是AC了,其实加个约束也是很简单的,不会影响总体思路。
代码如下:(没有加站里9辆车的限制)
就是用一个stack来模拟,让进栈的序列逐个进栈,然后再每次都判断一下是否与当前出栈序列的位置符合,如果不符合就继续进栈,如果符合就出栈,弄清楚各个的标记即可。
因为如果当前的栈顶符合出栈序列的当前位置却不出栈的话,它一定会在接下来入栈的车的后面出栈,就不可能符合给定的出栈顺序。
然而题目的数据好弱,后来才发现我都忘了用题目中“车站里最多只能同时有9辆车”这个条件,但是还是AC了,其实加个约束也是很简单的,不会影响总体思路。
代码如下:(没有加站里9辆车的限制)
#include <stack> #include <cstdio> #include <iostream> using namespace std; int main() { int n; char before[100],after[100]; bool change[100]; while(cin>>n>>before>>after){ int i=0,j=0,k=0; stack<char>st; while(1){ if(st.size()&&st.top()==after[j]){ st.pop(); change[k++]=0; j++; } else{ if(i==n) break; st.push(before[i++]); change[k++]=1; } } if(!st.size()){ printf("Yes.\n"); for(int x=0;x<k;x++) if(change[x]) printf("in\n"); else printf("out\n"); printf("FINISH\n"); } else{ printf("No.\n"); printf("FINISH\n"); } } return 0; }
相关文章推荐
- UltraISO制作U盘启动盘
- UVA 442 二十 Matrix Chain Multiplication
- HDU 4458 Shoot the Airplane (2012年杭州赛区现场赛F题)
- poj 2010 Moo University - Financial Aid(优先队列(最小堆)+ 贪心 + 枚举)
- HDU 2476 String painter(区间DP啊)
- RAID
- 2012 #1 Saving Princess claire_
- 大气实用WordPress主题推荐【wait主题】
- Xcode Command /usr/bin/codesign failed with exit code 1
- Raid基础知识
- Filter及FilterChain的使用详解
- ###《High-level event recognition in unconstrained videos》
- HA(High Availability)简介
- pod install 遇到 :[MT] DVTAssertions: ASSERTION FAILURE in ……
- HDU-4750 Count The Pairs
- HDU 1702 ACboy needs your help again!(栈+队列)
- RAID技术简单介绍和常用命令总结
- scala 14 trait
- tail -f -F区别
- Climbing Stairs