http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4
代码:
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<map>
#include<cstring>
#include<string>
#include<utility>
#include<stack>
#include<vector>
#include<iostream>
using namespace std;
typedef long long ll;
string a,b;
stack<char> build;
vector<char> operate;
int length;
void dfs(int iPush,int iPop)
{
if(iPush==length && iPop==length)
{
for(int i=0;i<operate.size();i++)
{
cout<<operate[i]<<' '; //结尾会有多余的一个空格
}
cout<<endl;
}
if(iPush+1 <= length)
{
build.push(a[iPush]);
operate.push_back('i');
dfs(iPush+1,iPop);
build.pop();
operate.pop_back();
}
if(iPop+1 <= iPush && iPop+1 <= length && build.top() == b[iPop])
{
char tmp=build.top();
build.pop();
operate.push_back('o');
dfs(iPush,iPop+1);
build.push(tmp);
operate.pop_back();
}
}
int main()
{
while(cin>>a>>b)
{
length=a.length();
cout<<"["<<endl;
dfs(0,0);
cout<<"]"<<endl;
}
return 0;
}