您的位置:首页 > 大数据 > 人工智能

HDU1022 Train Problem I

2015-08-30 20:59 330 查看
是一道很露骨的模拟栈的题目,但是由于第一次做到,还是卡了一下的。

就是用一个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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: