题意:给你一个序列,问能否通过栈操作得到另一个序列。。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
using namespace std;
char a[109],b[109];
int ans[209];
char tmp[109];
int n,m;
void dfs(int la,int lb,int lt,int cnt){
if(la==n&&lb==n){
for(int i=0;i<(n<<1);i++)
{
//if(i) printf(" ");
if(ans[i]) printf("i ");
else printf("o ");
}printf("\n");
return ;}
if(la<n){
tmp[lt]=a[la];
ans[cnt]=1;
dfs(la+1,lb,lt+1,cnt+1);
}
if(lt&&tmp[lt-1]==b[lb]){
char tt = tmp[lt-1];
ans[cnt] = 0;
dfs(la,lb+1,lt-1,cnt+1);
tmp[lt-1] = tt;
}
}
int main(){
// freopen("in.txt","r",stdin);
while(~scanf("%s%s",a,b)){
n = strlen(a);
m = strlen(b);
if(m!=n){
printf("[\n]\n");
continue;
}
printf("[\n");
dfs(0,0,0,0);
printf("]\n");
}
return 0;
}