首页 > 其他分享 >OpenJ_Bailian 4081 树的转换 数据结构

OpenJ_Bailian 4081 树的转换 数据结构

时间:2023-04-26 17:32:20浏览次数:74  
标签:4081 转换 OpenJ int res1 Up Bailian res2 include


题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=412663

题意:


我们都知道用“左儿子右兄弟”的方法可以将一棵一般的树转换为二叉树,如:

    0                             0
  / | \                          /
 1  2  3       ===>             1
   / \                           \
  4   5                           2
                                 / \
                                4   3
                                 \
                                  5



现在请你将一些一般的树用这种方法转换为二叉树,并输出转换前和转换后树的高度。


Input



输入是一个由“u”和“d”组成的字符串,表示一棵树的深度优先搜索信息。比如,dudduduudu可以用来表示上文中的左树,因为搜索过程为:0 Down to 1 Up to 0 Down to 2 Down to 4 Up to 2 Down to 5 Up to 2 Up to 0 Down to 3 Up to 0。
你可以认为每棵树的结点数至少为2,并且不超过10000。


Output



按如下格式输出转换前和转换后树的高度:
h1 => h2
其中,h1是转换前树的高度,h2是转换后树的高度。


Sample Input



dudduduudu


Sample Output



2 => 4

思路:刚开始想的是构造一个二叉树,后来想想并不需要,了解树转二叉树的原理,便可以发现转换后某点的深度为父节点的深度加上它是父节点的第几个子节点,所以直接从根节点按以上规律搜索一遍即可

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <functional>
#include <cctype>
#include <cmath>
using namespace std;

const int N = 100100;
char s[N];
int res1, res2;
void dfs(int &i, int dep1, int dep2)
{
    res1 = max(res1, dep1);
    res2 = max(res2, dep2);
    int cnt  = 1;
    while(true && s[i])
    {
        if(s[i] == 'd')
            dfs(++i, dep1 + 1, dep2 + cnt), cnt++;
        else
        {
            i++;
            return;
        }
    }
}
int main()
{
    while(~ scanf(" %s", s))
    {
        int i = 0;
        res1 = res2 = -1;
        dfs(i, 0, 0);
        printf("%d => %d\n", res1, res2);
    }
    return 0;
}




标签:4081,转换,OpenJ,int,res1,Up,Bailian,res2,include
From: https://blog.51cto.com/u_4158567/6228231

相关文章

  • Ubuntu/Debian 安装openJDK 1.8
     导入AdoptOpenJDKGPGkewget-qO-https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public|sudoapt-keyadd-1导入DEBRepositorysudoadd-apt-repository--yeshttps://adoptopenjdk.jfrog.io/adoptopenjdk/deb/1若terminal提示Commandnot......
  • 使用OPENJSON()在ADO使用报错:指定了非不二类型的表达式
    背景:工单管理功能,供应商信息字段是存的JSON字符串(数据库是2008R2版本),这个功能没有使用ES,现在业务需要增加供应商相关信息的查询实现:利用OPENJSON函数用ADO拼接Sql执行的时候报以上错误,复制sql出来放到DBeaver里面执行又没有问题,同样的sql,至于任务紧张不展开研究了,换成存储过......
  • GYM104081 部分题解
    比赛链接:https://codeforces.com/gym/104081目前就做了8题,里面还有4个水题……水题:ACEG,模拟题意即可,C和E有一些细节。不想写题解了F首先目标是如何将这9个数分组,由于答案一定存在,考虑随机化,固定\(a_1\inS_1\),然后随机一个\(a_i\inS_1\),异或得到\(S_1\)的另一......
  • Oracle JDK 和 OpenJDK 有什么区别?
    可能在看这个问题之前很多人和我一样并没有接触和使用过OpenJDK。那么OracleJDK和OpenJDK之间是否存在重大差异?下面我通过收集到的一些资料,为你解答这个被很多人忽视的问题。对于Java7,没什么关键的地方。OpenJDK项目主要基于Sun捐赠的HotSpot源代码。此外,OpenJDK......
  • docker使用openJDK导致图片验证码错误
    简介:docker使用openJDK导致Excel导出问题问题:本地环境导出Excel正常,测试环境导出Excel失败image.png看到上方报错日志开始以为是初始化WorkBook失败导致的空指针问题image.png后来打印了WorkBook对象发现并不是这个原因导致的空指针解决办法经排查发现开发项目的时候都是......
  • OpenJDK源码研究笔记(十):枚举的高级用法,枚举实现接口,竟是别有洞天
    在研究OpenJDK,Java编译器javac源码的过程中,发现以下代码。顿时发现枚举类竟然也有如此“高端大气上档次”的用法。沙场点兵(用法源码)com.sun.tools.javac.file.JavacFileManager.SortFilesprotectedenumSortFilesimplementsComparator<File>{FORWARD{......
  • 【NOI OpenJudge】【1.4】编程基础之逻辑表达式与条件分支
    01:判断数正负#include<cstdio>#include<iostream>usingnamespacestd;intmain(){intn;cin>>n;if(n>0){printf("positive\n");}elseif(n==0){printf("zero\n");}else{pri......
  • 【NOI OpenJudge】【1.2】编程基础之变量定义、赋值及转换
    01:整型数据类型存储空间大小#include<cstdio>intmain(){ inta;shortb; printf("%d%d",sizeof(a),sizeof(b)); return0;}02:浮点型数据类型存储空间大小#include<cstdio>intmain(){ floata;doubleb; printf("%d%d",sizeof(a),sizeof(b)); return......
  • 【NOI OpenJudge1789】算24(搜索)
    problem给定4个数,加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。问是否存在一种方式使得得到的表达式的结果等于24。solution正常的中缀表达式枚举和计算难度都约等于0,麻烦的是括号的枚举和处理。这里只要求满足的结果,所以换一种方式拿掉括号——打乱顺序即可(括号的用......
  • centos7安装openjdk17
    1、创建jdk目录mkdir-p/home/jdkcd/home/jdk2、下载openjdk17免安装包wgethttps://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/G......