POJ 2499 Binary Tree(二叉树,找规律)
题意:给一个这样的二叉树,每个节点用一对数(a,b)表示,根节点为(1,1)。设父亲为(a,b),左儿子(a+b,b),右儿子(a,a+b)。
给几组数据,(i,j),求从根节点到(i,j)节点需要向左子树走多少次,往右子树多少次。
思路:可以发现:当i>j时,(i,j)为左儿子;当i<j时,(i,j)为右儿子。
设父节点为(a,b),往左子树需要走l次,往右子树需要走r次,那么:
1.i>j时:i=a+b,j=b -> a=i-j,b=j l++;
2.i<j时:i=a,j=a+b -> a=i,b=j-i r++;
当然,写代码时不能一个一个减,会超时的。一次性把能减的都减去。
#include <iostream>
#include <stdio.h>
/*
AC
给一个这样的二叉树,每个节点用一对数(a,b)表示,根节点为(1,1)。设父亲为(a,b),左儿子(a+b,b),右儿子(a,a+b)。
给几组数据,(i,j),求从根节点到(i,j)节点需要向左子树走多少次,往右子树多少次。
思路:可以发现:当i>j时,(i,j)为左儿子;当i<j时,(i,j)为右儿子。
设父节点为(a,b),往左子树需要走l次,往右子树需要走r次,那么:
1.i>j时:i=a+b,j=b -> a=i-j,b=j l++;
2.i<j时:i=a,j=a+b -> a=i,b=j-i r++; */
using namespace std; int main()
{
int t;
scanf("%d",&t);
long long i,j;
int l,r;
for(int w=;w<=t;w++){
l=;r=;
scanf("%lld%lld",&i,&j);
while(){
if(i== && j==)
break;
/*
若i>j,只要求i中有多少个j,即i/j,l+=i/j,最后再把i剩下的赋值给i
若i<j,只要求j中有多少个i,即j/i,r+=j/i,最后再把j剩下的赋值给j
*/
if(i>j){
l+=i/j;
i-=i/j*j;
//若i是j的倍数,即当j=1时,l要减去1,退出循环
//也可以上面l+=(i-1)/j,这样就不用讨论i=0的情况了。
if(i==){
l--;
break;
}
}
else{
r+=j/i;
j-=j/i*i;
//若j是i的倍数,即当i=1时,r要减去1,退出循环
//也可以上面r+=(j-1)/i,这样就不用讨论j=0的情况了。
if(j==){
r--;
break;
}
}
}
printf("Scenario #%d:\n",w);
printf("%d %d\n",l,r);
puts("");
}
return ;
}
POJ 2499 Binary Tree(二叉树,找规律)的更多相关文章
- [HDOJ5573]Binary Tree(找规律,贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5573 这个题……规律暂时还找不到,先贡献两发TLE的代码吧,一个dfs一个状压枚举. #include ...
- Poj 2499 Binary Tree(贪心)
题目链接:http://poj.org/problem?id=2499 思路分析:结点向左边移动时结点(a, b)变为( a+b, b),向右边移动时( a, b )变为( a, a + b); 为求 ...
- POJ 2499 Binary Tree
题意:二叉树的根节点为(1,1),对每个结点(a,b)其左结点为 (a + b, b) ,其右结点为 (a, a + b),已知某结点坐标,求根节点到该节点向左和向右走的次数. 分析:往回一步一步走肯 ...
- HDU 5573 Binary Tree(找规律)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5573 题意:给你一个完全二叉树,节点为自然数的排列(第一行1,第二行2 3,第三行4 5 6 7... ...
- [LeetCode] 111. Minimum Depth of Binary Tree 二叉树的最小深度
Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...
- [LeetCode] 543. Diameter of Binary Tree 二叉树的直径
Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...
- Leetcode 110 Balanced Binary Tree 二叉树
判断一棵树是否是平衡树,即左右子树的深度相差不超过1. 我们可以回顾下depth函数其实是Leetcode 104 Maximum Depth of Binary Tree 二叉树 /** * Def ...
- [LeetCode] 111. Minimum Depth of Binary Tree ☆(二叉树的最小深度)
[Leetcode] Maximum and Minimum Depth of Binary Tree 二叉树的最小最大深度 (最小有3种解法) 描述 解析 递归深度优先搜索 当求最大深度时,我们只要 ...
- Full Binary Tree(二叉树找规律)
Description In computer science, a binary tree is a tree data structure in which each node has at mo ...
随机推荐
- java中Map,List与Set的区别
Set,List,Map的区别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类 ...
- POJ 3624
背包问题,在定容量的背包中放入物体求装满价值最大.因为每种物体数量只有1,故只有放与不放. #include<iostream> #include<cstring> #incl ...
- 《Apache之虚拟主机的配置》——RHEL6.3
1.安装httpd软件包: Yum install httpd 2.启动apache服务: [root@redhat Desktop]# /etc/init.d/httpd start Startin ...
- [转]Android在eclipse中的快捷键
1.选中你要加注释的区域,用ctrl+shift+C 会加上//注释2.先把你要注释的东西选中,用shit+ctrl+/ 会加上/* */注释3.要修改在eclispe中的命令的快捷键方式我们只 ...
- phpStudy for Linux (lnmp+lamp一键安装包)
phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 phpStudy for Linux 支持Apache/Ng ...
- python 获取 mac 地址 的代码
python 获取 mac 地址 的例子,有需要的朋友可以参考下. #!/bin/python import os import re def GetMac(): if os.name == ...
- JPG各种输入框样式
输入框景背景透明:<input style="background:transparent;border:1px solid #ffffff"> 鼠标划过输入框,输入框 ...
- 【PHP】phpcms html去除空白
// 文件路径:/phpcms/libs/classes/template_cache.class.php 42行 // 第四第五行是新增的 $content = $this->template ...
- Spark菜鸟学习营Day1 从Java到RDD编程
Spark菜鸟学习营Day1 从Java到RDD编程 菜鸟训练营主要的目标是帮助大家从零开始,初步掌握Spark程序的开发. Spark的编程模型是一步一步发展过来的,今天主要带大家走一下这段路,让我 ...
- 自改xss小平台上线
原先一直用xss.hk结果不知怎么被关的,正好手上有代码于是自己搭了一个,网上的类似的xss平台大多一样,原先的xss的chrome插件,不适合 "manifest_version" ...