题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1022
#include
#include
#include
using namespace std;
int main()
{
int n,i,j,c,d[18];//j记录字符串b的下标,d[]记录数据的入栈、出栈顺序
string a,b;
while(cin>>n>>a>>b)
{
i=j=c=0;
stack st;
int tag = 1;
while(j
{
if(a[i]==b[j])//如果a[i]==b[j]就直接记录入栈、出栈的顺序,而不必再将a[i]入栈
{
i++;
j++;
d[c++]=1;
d[c++]=0;
}
else if(!st.empty()&&st.top()==b[j])
{
d[c++]=0;
st.pop();
j++;
}
else if(i
{
d[c++]=1;
st.push(a[i]);
i++;
}
else//如果i>=n,且栈顶数据不等b[j],则说明以字符串b的顺序行不通
{
tag = 0;
break;
}
}
if(tag)
{
cout<<"Yes."<<endl;
for(i=0;i
if(d[i])
cout<<"in"<<endl;
else
cout<<"out"<<endl;
}
else
cout<<"No."<<endl;
cout<<"FINISH"<<endl;
}
return 0;
}
#include
#include
#include
using namespace std;
int main()
{
}