tree(i-la,la,lb-n-la+i);
tree(n+la-i-1,i+1,lb-1);
不用数字转
#include <iostream>
using namespace std;
string a,b;
inline void tree(int n,int la,int lb)
{
if(n<=0) return;
for(int i=la;i<=la+n-1;i++)
{
if(a[i]==b[lb])
{
cout<<b[lb];
tree(i-la,la,lb-n-la+i);
tree(n+la-i-1,i+1,lb-1);
return ;
}
}
}
int main()
{
cin>>a;
cin>>b;
tree(a.size(),0,a.size()-1);
return 0;
}
用数字转
#include <iostream>
using namespace std;
string a,b;
int zz[1000086],hh[1000086];
int len1=0,len2=0,top;
inline void tree(int n,int la,int lb)
{
if(n<=0) return;
for(int i=la;i<=la+n-1;i++)
{
if(zz[i]==hh[lb])
{
cout<<char(hh[lb]+64);
tree(i-la,la,lb-n-la+i);
tree(n+la-i-1,i+1,lb-1);
return ;
}
}
}
int main()
{
cin>>a;
cin>>b;
for(int i=0;i<a.size();i++)
zz[++len1]=int(a[i]-‘A‘+1);
for(int i=0;i<b.size();i++)
hh[++len2]=int(b[i]-‘A‘+1);
tree(a.size(),1,a.size());
return 0;
}