标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 24980 Accepted Submission(s):
9424



#include<stdio.h>
#include<string.h>
#include<stack>
#define MAX 1100
using namespace std;
int main()
{
int n,m,j,i,t,k;
char jin[MAX],chu[MAX];//进展顺序和出站顺序数组
int vis[MAX];//记录第i次是进站还是出站
while(scanf("%d",&t)!=EOF)
{
scanf("%s %s",jin,chu);
stack<char>s;//定义一个字符型的栈
memset(vis,0,sizeof(vis));
for(i=0,j=0,k=0;i<t;i++)
{
s.push(jin[i]);
vis[k++]=1;
while(!s.empty()&&s.top()==chu[j])//如果站不为空且栈顶的元素与出站顺序的元素相同
{
j++;//删除已出的元素
vis[k++]=0;//出站并标记
s.pop();//删除栈首元素
}
}
if(s.empty())
{
printf("Yes.\n");
for(i=0;i<k;i++)
{
if(vis[i])
printf("in\n");
else
printf("out\n");
}
}
else
printf("No.\n");
printf("FINISH\n");
}
return 0;
}
用数组实现:
#include<stdio.h>
#include<string.h>
#define MAX 1100
char zhan[MAX];
char jin[MAX],chu[MAX];//进展顺序和出站顺序数组
int vis[MAX];//记录第i次是进站还是出站
int main()
{
int n,m,j,i,s,sum,t,top,k;
while(scanf("%d",&t)!=EOF)
{
scanf("%s %s",jin,chu);
memset(vis,0,sizeof(vis));
top=0;k=0;
for(i=0,j=0,k=0;i<t;i++)
{
zhan[top++]=jin[i];//存栈
vis[j++]=1;
while(top>=0&&zhan[top-1]==chu[k])//如果站不为空且栈顶的元素与出站顺序的元素相同
{
vis[j++]=0;//出站并标记
top--;//删除栈首元素
k++;//删除已出的元素
}
}
if(top<0)
{
printf("Yes.\n");
for(i=0;i<j-1;i++)
{
if(vis[i])
printf("in\n");
else
printf("out\n");
}
}
else
printf("No.\n");
printf("FINISH\n");
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/tonghao/p/4582974.html