山东省第五届ACM大赛--Problem E: Full Binary Tree
中文题意:
有一棵满二叉树,根节点是1,然后依次从上到下,从左到右是2,3,4...10^9,求任意两点i,j的最短距离。
分析:
刚拿到这个题目的时候,看到求二叉树两点间最短距离,马上想到的是bfs求,可是这样的话就需要建树,由于刚开始接触数据
结构,直接不会建树,所以就是一脸的懵逼,想了一会就想到这是一个二叉树,路径无非就是左右,只要不走重复的点,肯定就是最
短路,所以就想到了将二叉树的结点编号放进一个数组中,所以,我只把二叉树最左边的结点(二叉树的临界点)放进数组中去,主
意出界的时候(f[i]>10^9)跳出,病记录下数组的长度,然后遍历数组,找到a所在的层,用一个变量l记录下此时的i,然后循环让b去往
a所在的层上跳跃,并进行num++,当a,b同层的时候,利用a,b同时向根节点跳跃,并进行计数,而此时是num+=2。不过这个代码写出
来后竟然是超时的,想了一下,可能是测试数据太多了,10000,于是换了种思路,以下上超时代码:
超时代码:
#include <iostream>
#include <cstring>
using namespace std;int f[10000];//数组,放结点的值
int len,a,b,t;int main()
{f[0]=1;//根节点放到数组第一个位置for(int i=1;; i++){f[i]=f[i-1]*2;//将最左边的结点一次放进数组if(f[i]>1e9)//出界{len=i-1;//返回到界内break;}}cin>>t;while(t--){cin>>a>>b;if(a>b)swap(a,b);int cnt=0;int l;for(int i=0; i<len; i++){if(a>=f[i]&&a<f[i+1])//c所在二叉树的层{l=i;break;}}while(1){if(b>=f[l]&&b<f[l+1])//b在a所在的二叉树的层break;b/=2;//b跨层找acnt++;}while(a!=b)//a,b同层{a/=2;b/=2;cnt+=2;}cout<<cnt<<endl;}return 0;
}
分析&&思路2:
由于本题中的测试数据太多,所以用数组来存简直就是浪费内存和时间,所以就想到了,直接将较大的点的值进行跳跃,如果能正好跳到在同层并且相等,截止,换另一个较大的值进行跳跃,知道两个点同时跳到相等为止,每一次跳,都进行计数。下面上代码:
AC代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{int T,n,m;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);int ans=0;while(n!=m){if(n>m) n/=2;else m/=2;ans++;}printf("%d\n",ans);}
}
经验:其实本题实际上是一个数学思维的水题,不牵扯数据结构,只是太容易惯性思维了,还是动脑子太少的原因。
山东省第五届ACM大赛--Problem E: Full Binary Tree相关推荐
- 山东省第五届ACM大学生程序设计竞赛 Colorful Cupcakes
Colorful Cupcakes Time Limit: 2000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Beaver Bindu has N cupc ...
- 山东省第五届ACM大学生程序设计竞赛 Weighted Median
Weighted Median Time Limit: 2000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 For n elements x1, x2, .. ...
- 2014山东省第五届ACM省赛
现在只会做8题....ABCDEFGJ 题目在sdut 2877-2886 A. angry birds again and again 链接 http://acm.sdut.edu.cn/sduto ...
- SDUT 2879 Colorful Cupcakes (2014年山东省第五届ACM大学生程序设计竞赛)
Colorful Cupcakes Time Limit: 2000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Beaver Bindu has N cupc ...
- 山东省第五届ACM省赛题——Colorful Cupcakes(四维dp)
题目描述 Beaver Bindu has N cupcakes. Each cupcake has one of three possible colors. In this problem we ...
- 山东省第八届acm大赛 F题 (SDUT 3898)
quadratic equation Time Limit: 2000MS Memory Limit: 131072KB Problem Description With given integers ...
- Balanced Binary Tree leetcode java
题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...
- LeetCode: 111. Minimum Depth of Binary Tree
题目 Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bina ...
- 655. Print Binary Tree 解题报告(树)
第一部分:搜索.遍历 [例子1]655. Print Binary Tree Example 1: Input:1/2 Output: [["", "1", & ...
- 【leetcode】Balanced Binary Tree(middle)
Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...
最新文章
- Java案例——字符串拼接
- maple linux,Linux下面如何安装maple,mathematica,matlab这类软件?
- 分布式概念-分布式事务,并发处理协议
- 查看oracle所有实例_Oracle目录结构与系统用户-数据库(3)
- java怎么编写软键盘_安卓手机软键盘操作
- 基于visual c++之windows核心编程代码分析(42)windows下进程的身份切换
- id3与软件测试,ID3算法的实现
- Seata AT模式
- BZOJ1031: [JSOI2007]字符加密Cipher
- Doker : Docker 容器与宿主机共享文件
- 北斗如何帮助电动车精细管理?北斗高精度定位显神威
- 对于火灾和火焰检测的初步学习
- JAVA爬虫爬取国家统计局行政区划数据(2021年最新数据)
- 单总线CPU微程序条件判别测试逻辑
- 免费领取百度云盘2048G永久空间,永久离线下载特权
- 电力监控系统如何在锡林郭勒配电工程中采集相关遥测、遥信和SOE等数据完成监视、控制和预警?
- 【STL】string详解(string类常用的操作函数、构造函数、赋值操作、子符串的拼接、查找和替换、比较、存取、插入和删除、获取)
- nginx后端节点的健康检查
- 分销小程序定制开发|分销系统开发对商家有哪些好处?
- android 11中置入第三方应用apk
热门文章
- composer 进行tp6的安装
- 计算机文件无法移动,电脑上不能拖动文件怎么办 电脑上不能拖动文件如何解决...
- 计算机专业英文授课,计算机专业全英文授课分析
- atom n270 cpu linux,继续改造ATOM N270增加千兆口自制软路由
- 2021-03-09
- etimedout 运行_googleapis 谷歌统计 nodejs 遇到 ECONNRESET和 ETIMEDOUT
- 电子签名的制作和使用
- free、detele与野指针
- 大数据讲课笔记5.5 MR案例——倒排索引
- 关于异常结存的问题,库存结存为什么会产生数量为0,成本不为0的异常情况