标签:



3 123 321 3 123 312
Yes. in in in out out out FINISH No. FINISHFor the first Sample Input, we let train 1 get in, then train 2 and train 3. So now train 3 is at the top of the railway, so train 3 can leave first, then train 2 and train 1. In the second Sample input, we should let train 3 leave first, so we have to let train 1 get in, then train 2 and train 3. Now we can let train 3 leave. But after that we can‘t let train 1 leave before train 2, because train 2 is at the top of the railway at the moment. So we output "No.".HintHint
Ignatius.L
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022
题意:或者站只有一条铁轨,问火车是否可以按前面的序列进站后是否可以按后面的序列出站.
栈模拟:
#include<iostream>
#include<stack>
#define maxn 100
using namespace std;
int main()
{
stack<char>s;
int n,i,j,k;
bool result[maxn];//result数组用来表示结果,1表示进栈。0表示出
char in[maxn],out[maxn];//序列1和序列2
while(cin>>n>>in>>out)
{
j=0,i=0,k=1;
s.push(in[0]);//为防止栈空,压一个进去
result[0]=1;//记录进来了一个。
while(i<n&&j<n)
{
if(!s.empty()&&s.top()==out[j])
{
//如果栈顶元素与序列2当前的元素相等,则弹栈,序列2集团向后移一位。
j++;
s.pop();
result[k++]=0;
}
else
{
//否则从序列1中取当前元素压入栈中。
s.push(in[++i]);
result[k++]=1;
}
}
if(i==n)//如果I==N表示栈顶元素不等于序列2当前元素,且序列1中元素都已经入过栈,判断不能得到序列2一样的答案。
cout<<"No."<<endl;
else
{
cout<<"Yes."<<endl;
for(i=0; i<k; i++)
if(result[i])
cout<<"in"<<endl;
else
cout<<"out"<<endl;
}
cout<<"FINISH"<<endl;
}
return 0;
}
#include <iostream>
#include <stack>
#include <cstdio>
#include <cstring>
using namespace std;
stack<int> S;
int main()
{
int n,i,j,k;
bool flag[10000];
string in,out;
while(~scanf("%d%*c",&n))
{
cin >> in >> out;
i = j = k = 0;
while(j<n+1 && i<n)
{
if(!S.empty() && S.top() == out[i])
{
i++;
flag[k] = true;
k++;
S.pop();
}
else
{
S.push(in[j]);
flag[k] = false;
j++;
k++;
}
}
cout<<k<<endl;
if(k!=2*n)
{
cout << "No." << endl;
}
else
{
cout << "Yes." << endl;
for(i = 0; i<k; i++)
{
if(flag[i])
cout << "out" << endl;
else
cout << "in" << endl;
}
}
cout << "FINISH" << endl;
}
return 0;
}
# include<stdio.h>
# include<string.h>
int main()
{
int n,i,j,k,head;
char a[1000],b[1000],t[1000],str[1000][10];
while(scanf("%d%s%s",&n,a,b)!=EOF)
{
head=i=j=k=0;
strcpy(str[k++],"in");
while(i<n)
{
t[head]=a[i];
while(t[head]==b[j]&&b[j]!='\0'&&t[head]!='\0')
{
head--;
j++;
strcpy(str[k++],"out");
}
head++;
strcpy(str[k++],"in");
i++;
}
if(head==0)
{
printf("Yes.\n");
for(i=0; i<k-1; i++)
printf("%s\n",str[i]);
printf("FINISH\n");
}
else
{
printf("No.\n");
printf("FINISH\n");
}
}
return 0;
}HDU 1022 Train Problem I (STL 栈模拟)
标签:
原文地址:http://blog.csdn.net/hurmishine/article/details/51438919