PTA 二叉树路径
时间:2019-03-27
本文章向大家介绍PTA 二叉树路径,主要包括PTA 二叉树路径使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
二叉树的路径 (25 分)
二叉树是一种普通的数据结构。给出一棵无限的二叉树,节点被标识为一对整数,构造如下:
(1)树根被标识为整数对(1,1)。
(2)如果一个节点被标识为(a,b),那么其左子树树根被标识为(a+b,b),其右子树树根被标识为(a,a+b)。
给出上述二叉树的某个节点标识(a,b),假定从树根到这一给定的节点是沿着最短的路径走,你能给出多少次要向左子树走,多少次要向右子树走?
输入格式:
第一行给出测试用例个数。每个测试用例占一行,由两个整数i和j组成(1<=i, j<=2*109),表示节点的标识(i,j)。假定给出的节点都是有效的节点。
输出格式:
对每个测试用例,第一行为“Scenario #i:”,其中i是测试用例编号,从1开始编号;然后输出一行给出两个整数l和r,中间用1个空格隔开,其中l是从树根到该节点要向左子树走的次数,r是从树根到该节点要向右子树走的次数。在每个测试用例结束后输出一个空行。
输入样例:
3
53 6
7 8
27 95
输出样例:
Scenario #1:
12 1
Scenario #2:
6 1
Scenario #3:
13 4
题意:题目上说了好多,其实就是从(1,1)往下找,找到到(i,j)的最短路径,输出要走多少次左子树,多少次右子树。
一开始我看到最短路径,我第一想到的就是bfs去写,写完之后交了一发,有一组数据内存超限(我是从(1,1)开始往下找)。然后我就改进了一下算法,用逆向思维,翻着搜,就没有内存超限了,但是时间超限了(哭笑)......之后,我就仔细的想了一想,找了一个规律,原来这是一个思维题,压根就不是什么搜索题,就是用除法去做,很水...虽然我WA了几次。
#include<iostream> #include<cstdio> #include<queue> using namespace std; int main() { int n,x,y,p=1,l,r; scanf("%d",&n); while(n--) { scanf("%d%d",&x,&y); l=r=0; //l表示要经过左子树的数量,r表示要经过右子树的数量 while(x!=1||y!=1) { if(x>y) { if(y==1) l+=x-1,x=1; //当y为1时,x就只要走x-1步就能变成1了,记住要把x赋为1(跳出的条件所需) else l+=x/y,x%=y; //当两个数都不为1时,将其的商加入l中,x的值需要改变成x%y的余数 } else if(x<y) { if(x==1) r+=y-1,y=1; //同上 else r+=y/x,y%=x; //同上 } } printf("Scenario #%d:\n%d %d\n\n",p++,l,r); } return 0; }
- c# IO操作(带进度的文件复制器,读取文本文件的指定行)
- 高科技来了!玩游戏一样开船的时代来了……
- C++库大全
- 人工智能行业前景预测 全球市场或超2700亿元
- Arxiv网络科学论文摘要14篇
- 工信部:网络强国建设2018年重点工作任务
- 刚刚!张小龙再出重磅!微信小程序掀起新零售红利狂潮!
- 无人驾驶系列——深度学习笔记:Tensorflow的安装-windows系统
- 2018年12大顶级云安全威胁
- 缤果盒子为域名意识打call 六位数秒下bingobox.com
- 用Qt写软件系列二:QCookieViewer(浏览器Cookie查看器)
- 用Qt写软件系列一:QCacheViewer(浏览器缓存查看器)
- 用Qt写软件系列三:一个简单的系统工具(上)
- ChartDirector应用笔记(三)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法