没做51,做HD开始写博客了。结果谢了半天都是水题。尴尬,这道题其实说白了就是栈,o1是进栈的顺序,o2是要求的出栈的顺序,其实意思就是能不能按照那个顺序出栈。这题思路就是按照o1的进来,然后对着o2进行出栈操作,最后出完了就是YES,没出就是NO。
#include <iostream>
#include <string.h>
using namespace std ;
typedef long long ll;
const int MAX =1000050;
struct{
char n[10];
int p;
}note;
char o1[9],o2[9];
bool ans[20];
int main(){
int n ;
while(cin>>n){
cin>>o1>>o2;
int p1=0,p2=0;
note.p=1;
int i = 1;
while(i<=2*n){
if(note.n[note.p-1]==o2[p2]){
p2++;
note.p--;
ans[i]=false;
}//出栈
else if(p1<n){
note.n[note.p++]=o1[p1++];
ans[i]=true;
}//进栈
i++;
}
if(note.p==1){
cout<<"Yes."<<endl;
for(int i = 1 ; i <= 2*n ; i++)
if(ans[i]) cout<<"in"<<endl;
else cout<<"out"<<endl;
}
else
cout<<"No."<<endl;
cout<<"FINISH"<<endl;
}
return 0;
}