1 条题解

  • 0
    @ 2025-10-8 16:50:17
    #include<bits/stdc++.h> 
    using namespace std;
    typedef long long LL;
    char a[35],b[35];
    LL dfs(int aL, int aR, int bL, int bR)
    {
    	if(a[aL]!=b[bR]) return 0;
    	if(aL>=aR) return 1;
    	if(a[aL+1]==b[bR-1]) return 2*dfs(aL+1,aR,bL,bR-1);
    	int p;for(int i=bL;i<=bR-1;i++)if(a[aL+1]==b[i]){p=i;break;}
    	int LL=p-bL+1;//左孩子树有多少个点
    	return dfs(aL+1,aL+1+LL-1,bL,p)*
    		   dfs(aL+1+LL-1+1,aR,p+1,bR-1);	
    }
    int main()
    {
        scanf("%s%s",a+1,b+1);
        int len=strlen(a+1);
        LL ans=dfs(1,len,1,len);
        printf("%lld\n",ans);
        return 0;
    }
    
    • 1

    *【递归】已知先序和后序求中序方案数

    信息

    ID
    399
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    216
    已通过
    48
    上传者