zoukankan      html  css  js  c++  java
  • P1827 [USACO3.4]美国血统 American Heritage

    重建二叉树题

    存树

    // ABEDFCHG 
    // CBADEFGH 
    
    #include<iostream>
    using namespace std;
    
    const int N = 30;
    
    struct Node{
        char val;
        int l, r;
    }tr[N];
    
    int st[N];
    int cnt;
    
    string a, b;
    
    int dfs(int l1, int r1, int l2, int r2){
        if(l1 > r1) return 0;
        int u = ++ cnt;
        tr[u].val = b[l2];
        int idx = st[b[l2] - 'A'];
        tr[u].l = dfs(l1, idx - 1, l2 + 1, l2 + idx - l1);
        tr[u].r = dfs(idx + 1, r1, l2 + idx - l1 + 1, r2);
        return u;
    }
    
    void print(int u){
        if(tr[u].l) print(tr[u].l);
        if(tr[u].r) print(tr[u].r);
        cout << tr[u].val;
    }
    
    int main(){
        cin >> a >> b;
        
        for(int i = 0; i < a.size(); i ++) st[a[i] - 'A'] = i;
        
        print(dfs(0, a.size() - 1, 0, b.size() - 1));
    }
    

    不存树

    #include<iostream>
    using namespace std;
    
    const int N = 30;
    
    int st[N];
    
    string a, b;
    
    void dfs(int l1, int r1, int l2, int r2){
        if(l1 > r1) return;
        int idx = st[b[l2] - 'A'];
        dfs(l1, idx - 1, l2 + 1, l2 + idx - l1);
        dfs(idx + 1, r1, l2 + idx - l1 + 1, r2);
        cout << b[l2]; 
    }
    
    int main(){
        cin >> a >> b;
        
        for(int i = 0; i < a.size(); i ++) st[a[i] - 'A'] = i;
        
        dfs(0, a.size() - 1, 0, b.size() - 1);
        
        return 0;
    }
    
  • 相关阅读:
    【python-plt】二元正态密度函数图像
    【python-plt】一元正态分布图像
    【7】极大似然估计与贝叶斯估计
    实变函数【1】集合
    图形学-心得
    分布式网络架构
    shader的内置变量
    图形学-绘制
    python加载图片
    linux下批量删除utf8 bom
  • 原文地址:https://www.cnblogs.com/tomori/p/13858056.html
Copyright © 2011-2022 走看看