注意两个光标的移动,o1可以在溢出位等待(order1要稍大一点点),02一旦溢出则停止。
//
// main.cpp
// hdu1022
//
// Created by baodong on 15/4/5.
// Copyright (c) 2015年 baodong. All rights reserved.
//
#include <iostream>
#include <stack>
using namespace std;
#define MAX 1000
char order1[MAX],order2[MAX];
int main(int argc, const char * argv[]) {
stack<int>stack;
int N ;
while(cin>>N){
//结果存放,0出站,1入站
int result[MAX*2];
int re=0;
//游标
int o1=0,o2=0;
cin>>order1;
cin>>order2;
//第一个首先入站
stack.push(order1[o1++]);
result[re++] = 1;
while(o1<=N && o2<N){
if (stack.size()>0 && order2[o2] == stack.top() ) {
//出站
stack.pop();
o2++;
result[re++] = 0;
}else{
//继续入站
stack.push(order1[o1++]);
result[re++] = 1;
}
}
// cout<<o1<<o2<<re;
if(o2 == N){
cout<<"Yes.\n";
for (int i=0; i<re; i++) {
if (result[i] == 0) {
cout<<"out\n";
}else{
cout<<"in\n";
}
}
}else{
cout<<"No.\n";
}
cout<<"FINISH\n";
}
return 0;
}