#include<iostream>
#include<algorithm>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
stack <int> s;
int main()
{
int k;
while(scanf("%d",&k)!=EOF)
{
int i,j;
string a,b;
cin>>a;
cin>>b;
int n=0;
for(i=0;i<a.length();i++){
if(s.empty()||(b[n]-'0')!=s.top()) {s.push(a[i]-'0'); //puts("in");
}
while(!s.empty()&&s.top()==(b[n]-'0')){
s.pop();
//puts("out");
if(n!=k-1) n++;
}
}
///*
if(s.empty())
{
puts("Yes.");
int m=0;
for(i=0;i<a.length();i++){
if(s.empty()||(b[m]-'0')!=s.top()){
s.push(a[i]-'0');
puts("in");
}
while(!s.empty()&&(b[m]-'0')==s.top()){
s.pop();
puts("out");
if(m!=k-1) m++;
}
}
puts("FINISH");
}
else {
puts("No.");
puts("FINISH");
}
//*/
while(!s.empty()) s.pop();
}
return 0;
}
这个题调bug调了好久。。。。。。
大致思路是先判断可不可行,再把具体的步骤实现出来,一定要注意if和while 语句里的条件不能交换顺序,否则就会造成非法访问的问题。