题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1022
题目大意:
给定入栈顺序,问能否按照某个方式出栈。
思路:
直接模拟即可。
代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
char s1[15],s2[15];
int main()
{
stack<int>st;
int n,i,j,k,p[1000],t,vis[15],x;
while(scanf("%d",&n)!=EOF)
{
t=0;
x=0;
memset(vis,0,sizeof(vis));
while(!st.empty())st.pop();
memset(p,0,sizeof(p));
scanf("%s%s",s1,s2);
for(i=0;i<n;i++)
{
s1[i]=s1[i]-'0';
s2[i]=s2[i]-'0';
}
st.push(s1[0]);
vis[s1[0]]=1;
p[t++]=0;
int flag=0,ss=0;
while(!st.empty()||ss<n)
{
for(i=0;i<n;i++)
{
if(!vis[s1[i]]){ //判断当前的数是否已经入栈
vis[s1[i]]=1;
p[t++]=0;
st.push(s1[i]);
}
if(s1[i]==s2[x]){
if(st.top()==s2[x])//如果要出栈的时候发现栈顶元素就是要出栈的元素就继续操作,否则就不可能
{vis[s1[i]]=1;
ss++;
st.pop();
p[t++]=1;
x++;
break;}
else {
flag=1;
break;
}
}
}
if(flag)break;
}
if(flag){
printf("No.\n");
printf("FINISH\n");
}
else {
printf("Yes.\n");
for(i=0;i<t;i++)
{
if(p[i]==0)printf("in\n");
else printf("out\n");
}
printf("FINISH\n");
}
}
}