zoukankan      html  css  js  c++  java
  • USACO 3.4 American Heritage

    American Heritage

    Farmer John takes the heritage of his cows very seriously. He is not, however, a truly fine bookkeeper. He keeps his cow genealogies as binary trees and, instead of writing them in graphic form, he records them in the more linear `tree in-order' and `tree pre-order' notations.

    Your job is to create the `tree post-order' notation of a cow's heritage after being given the in-order and pre-order notations. Each cow name is encoded as a unique letter. (You may already know that you can frequently reconstruct a tree from any two of the ordered traversals.) Obviously, the trees will have no more than 26 nodes.

    Here is a graphical representation of the tree used in the sample input and output:

                      C
                    /   
                   /     
                  B       G
                 /      /
                A   D   H
                   / 
                  E   F
    

    The in-order traversal of this tree prints the left sub-tree, the root, and the right sub-tree.

    The pre-order traversal of this tree prints the root, the left sub-tree, and the right sub-tree.

    The post-order traversal of this tree print the left sub-tree, the right sub-tree, and the root.

    PROGRAM NAME: heritage

    INPUT FORMAT

    Line 1: The in-order representation of a tree.
    Line 2: The pre-order representation of that same tree.

    SAMPLE INPUT (file heritage.in)

    ABEDFCHG
    CBADEFGH
    

    OUTPUT FORMAT

    A single line with the post-order representation of the tree.

    SAMPLE OUTPUT (file heritage.out)

    AEFDBHGC 

    —————————————————————
    用前序遍历中某个字母的位置可以得到它的左子树的长度
    然后就可以了
    存代码
     1 /*
     2 ID: ivorysi
     3 PROG: heritage
     4 LANG: C++
     5 */
     6 #include <iostream>
     7 #include <cstdio>
     8 #include <cstring>
     9 #include <algorithm>
    10 #include <queue>
    11 #include <set>
    12 #include <vector>
    13 #include <string.h>
    14 #define siji(i,x,y) for(int i=(x);i<=(y);++i)
    15 #define gongzi(j,x,y) for(int j=(x);j>=(y);--j)
    16 #define xiaosiji(i,x,y) for(int i=(x);i<(y);++i)
    17 #define sigongzi(j,x,y) for(int j=(x);j>(y);--j)
    18 #define inf 0x3f3f3f3f
    19 #define MAXN 400005
    20 #define ivorysi
    21 #define mo 97797977
    22 #define ha 974711
    23 #define ba 47
    24 #define fi first
    25 #define se second
    26 #define pii pair<int,int>
    27 using namespace std;
    28 typedef long long ll;
    29 int id[30];
    30 int root,lson[30],rson[30],fa[30];
    31 string str;
    32 int dfs(string s,int fa) {
    33     if(s.length()<1) return 0;
    34     int u=s[0]-'A'+1;
    35     if(s.length()==1) {return u;}
    36     lson[u]=dfs(s.substr(1,id[u]-id[fa]-1),fa);
    37     rson[u]=dfs(s.substr(id[u]-id[fa]),u);
    38     return u;
    39 }
    40 void ans(int u) {
    41     if(u==0) return;
    42     ans(lson[u]);
    43     ans(rson[u]);
    44     printf("%c",u+'A'-1);
    45 }
    46 void init() {
    47     cin>>str;
    48     xiaosiji(i,0,str.length()) {
    49         id[str[i]-'A'+1]=i+1;    
    50     }
    51     cin>>str;
    52     root=str[0]-'A'+1;
    53 }
    54 void solve() {
    55     init();
    56     dfs(str,0);
    57     ans(root);
    58     puts("");
    59 }
    60 int main(int argc, char const *argv[])
    61 {
    62 #ifdef ivorysi
    63     freopen("heritage.in","r",stdin);
    64     freopen("heritage.out","w",stdout);
    65 #else
    66     freopen("f1.in","r",stdin);
    67 #endif
    68     solve();
    69 }
     
  • 相关阅读:
    Extjs4.0以上版本 Ext.Ajax.request请求的返回问题
    C# NPOI 操作Excel 案例
    C# Microsoft.Office 操作Excel总结
    asp.net core NLog将日志写到文件
    新装的SSMS一打开就显示VS许可证过期,但VS又运行正常,解决方法。
    sql server 查询log日志 sql语句
    sql server 删除所有表及所有存储过程、所有视图和递归查询、数字类型转为字符串
    C#使用Selenium+PhantomJS抓取数据
    python爬虫实例项目大全
    SQL Server TVPs 批量插入数据
  • 原文地址:https://www.cnblogs.com/ivorysi/p/6242753.html
Copyright © 2011-2022 走看看