题目刚开始看的很纠结,后来百度了一下,又忽然想到了算法竞赛入门那本书上介绍栈时举的火车的例子瞬间顿悟了!
2573915 2011-07-10 08:55:14 Presentation Error 1004 C 0 160 ylwh!
2573918 2011-07-10 09:01:47 Accepted 1004 C 0 160 ylwh!
#include <stdio.h>
#include <string.h>
char s1[100], s2[100], temp[100], ope[200];
int tail;
void put(int t, int s, int q, int p)
{
int i, j, k;
i=t, j=s, k=p;
while(j<=q)
{
temp[i++]=s1[j++];
ope[k++]='i';
}
ope[k]='o';
}
void next(int k, int s, int t, int p)
{
int i;
if(k>=tail)
{
for(i=0; i<2*tail; i++)
{
printf("%c ", ope[i]);
}
printf("\n");
}
for(i=tail-1; i>=s; i--)
{
if(s1[i]==s2[k])
{
put(t, s, i, p);
next(k+1, i+1, t+i-s, p+i-s+2);
}
}
if(t-1>=0 && temp[t-1]==s2[k])
{
ope[p]='o';
next(k+1, s, t-1, p+1);
}
}
int main(void)
{
while(scanf("%s%s", s1, s2)!=EOF)
{
tail=strlen(s1);
printf("[\n");
next(0, 0, 0, 0);
printf("]\n");
}
return 0;
}