zoukankan      html  css  js  c++  java
  • POJ 1240 Pre-Post-erous! 解题报告

    题意:

           给出一个m叉树的前,后序遍历求这样的树有多少种。


    Solution:

               我们知道前序遍历的第一个点一定是根节点,后序遍历的最后一个点一定是根节点。

               由此,我们只一要确定对于每一个节点,它有多少个儿子节点,再累乘C(m,k)。

    code

    #include  <iostream>
    #include <algorithm>
    #include <string>
    using namespace std;
    string sq, sh;
    int len, ans,m;
    int Combination (int n, int m)
    {
    	int ans = 1;
    	for (int i = 1; i <= m; i++)
    		ans = ans * (n - i + 1) / i;
    	return ans;
    }
    void make (int l, int r, int t, int w) {
    	if (l > r || t > w) return;
    	int p = 0, i = 0;
    	while (l <= r) {
    		char s = sq[l];
    		for (i = 0; i < len; i++) if (sh[i] == s) break;
    		int k = w - i+1;
    		make (l+1, l+k-1, i+1, w);
    		l = l + k;
    		w=i-1;
    		p++;
    	}
    	ans*=Combination(m,p);
    }
    int main() {
    	while (cin >>m>> sq >> sh) {
    		len = (int) sq.size() - 1;
    		ans=1;
    		reverse (sh.begin(), sh.end() );
    		make (1, len, 1, len);
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    BM求递推式模板
    主席树浅谈
    DSU on Tree浅谈
    树链剖分浅谈
    省选模拟八 题解
    提答题 总结
    交互题 总结
    省选模拟七 题解
    省选模拟六 题解
    省选模拟五 题解
  • 原文地址:https://www.cnblogs.com/keam37/p/3871107.html
Copyright © 2011-2022 走看看