题目意思就是找一棵按上面链接所示的树对应的上面的两个点的最小公共祖先(LCP,Least Common Father),按照比较大小来依次返回自己的父亲节点就行了。具体看代码:getfather(a)函数是找父亲的代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxDepth = ;
long long three[maxDepth] , sum[maxDepth];
void init() {
three[] = ;
sum[] = ;
for(int i=;i<maxDepth;i++)
{
three[i] = three[i-] * ;
sum[i] = sum[i-] + three[i];
} for(int i = ; i < maxDepth; i ++)
{
cout << three[i] << "\t";
}
cout << endl; for(int i = ; i < maxDepth; i ++)
{
cout << sum[i] << "\t";
}
cout << endl;
//cout << "INT_MAX\t" << INT_MAX <<endl;
}
int getfather(long long a) {
if(a <= )
return ;
int i;
for(i=;sum[i]<a;i++)
;
i-- ;
int tmp = (+a-sum[i]) /;
int father = sum[i] - tmp + ;
return father;
}
int LCP(int a,int b) {
while(a != b) {
if(a > b) a = getfather(a);
else b = getfather(b);
}
return a;
}
int main() {
int a , b;
init();
while(scanf("%d%d" , &a,&b) != EOF) {
//cnt = 0;
int ans = LCP(a , b);
printf("%d\n" , ans);
}
return ;
}

其中 three array 保存3的指数
sum arry 保存截止到某一行为止,保存的数目-1,因为index是从0开始。

可以看见,sum[20] > INT_MAX 了,所以,sum中只要21个元素就能覆盖所有的 0 到 INT_MAX

同时,由于three[20]和sum[20] > INT_MAX,所以用long long 来保存。

three array:

sum array:

INT_MAX 

最后,交替计算当前节点的父节点,知道两者的父节点相同为止。

getFather 的计算也比较简单,和sum array 比较,找到sum[i] > node, 然后i--,知道,节点处于行的上一行。

然后计算offerset=(node-sum[i]+2)/3 就是其距离sum[i]的偏移量,所以father= sum[i]-offerset + 1;

举例:如要查找17的father,查找到 12 < 17 < 39, 所以17 处于sum[2]= 12 的下一行。

offset = (17+2 - 12) /3 = 2, 也就是说 17 的father 距离 sum[2]有两个距离。实际上是一个,

所以father = sum[2]-offset + 1 = 12 -2 + 1 = 11.

亚马逊 在线测试题目 amazon (变种的)三叉树的最近公共祖先问题的更多相关文章

  1. 亚马逊 在线测试题目 amazon

    分析:其实就是求矩形中某一个点到其他点的距离加权最小 方法一: 对每一个点求其到其他点的加权距离,然后比较最小.由于有M*N个点,对每一个点求加权距离是O(M*N)的,所以整体时间复杂度是O(M*M* ...

  2. 亚马逊记AWS(Amazon Web Services)自由EC2应用

    很长时间,我听到AWS能够应用,但是需要结合信用卡,最近申请了. 说是免费的,我还是扣6.28,后来我上网查了.认为是通过进行验证.像服务期满将返回. 关键是不要让我进入全抵扣信用卡支付passwor ...

  3. 最新亚马逊 Coupons 功能设置教程完整攻略!

    最新亚马逊 Coupons 功能设置教程完整攻略! http://m.cifnews.com/app/postsinfo/18479 亚马逊总是有新的创意,新的功能.最近讨论很火的,就是这个 Coup ...

  4. [转]Amazon AWS亚马逊云服务免费一年VPS主机成功申请和使用方法

    今天部落将再次为大家介绍如何成功申请到来自亚马逊的Amazon AWS免费一年的VPS主机服务.亚马逊公司这个就不用介绍了,是美国最大的一家网络电子商务公司,亚马逊弹性计算云Amazon EC2更是鼎 ...

  5. 在亚马逊amazon的AWS上安装Node和MongoDB服务器

    在亚马逊amazon的AWS上安装Node和MongoDB服务器 在建立AWS上账号.创建EC2 ,用putty链接上之后,就可以用下面的方法开始安装. !!! 如果不是是自己建立的EC2, 而是由B ...

  6. 亚马逊云服务器VPS Amazon EC2 免费VPS主机配置CentOS及其它内容

    Amazon目前提供为期一年的免费VPS服务,可到地址http://aws.amazon.com 进行申请. 现在对账号申请成功后,对VPS主机配置CentOS的过程做个图文介绍 1.创建实例(Ins ...

  7. 通过SecureCRT访问亚马逊Amazon EC2主机

    亚马逊推出了免费的云主机服务器 Amazon EC2,它是通过安全密钥来访问主机的. 问题是下载的密钥在SecureCRT 上无法直接使用,需要转换. 下面的方法可以在自己的linux主机上生成sec ...

  8. http://aws.amazon.com/cn/ses/ 亚马逊 营销性非事务邮件发送平台

    http://aws.amazon.com/cn/ses/   亚马逊 营销性非事务邮件发送平台

  9. Android支付接入(八):Amazon亚马逊支付

    下面跟大家一起走一遍Amazon亚马逊的支付,亚马逊目前刚把业务拓展到大陆市场,但这并不代表Amazon支付不成熟,恰恰相反,Amazon的支付流程,支付结果获取及测试另人称赞,支付流程.测试流程简洁 ...

随机推荐

  1. Spring中Quartz调度器的使用

    一.Quartz的特点 * 按作业类的继承方式来分,主要有以下两种: 1.作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式 2. ...

  2. PHP session回收机制

    由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效.当一个有效请求发生时,PHP会根据全局变量 session.gc_probability/sessi ...

  3. 5)Java部分常用package功能介绍

    1> java.lang    (package)   这个是系统的基础类,比如String等都是这里面的,这个package是唯一一个可以不用import就可以使用的Package 包中关键类 ...

  4. 【转】Spark 体系结构

    原文地址:http://jerryshao.me/architecture/2013/03/29/spark-overview/ 援引@JerryLead的系统架构图作为Spark整体结构的一个 bi ...

  5. MarkDown写作技巧

    前言 年轻的我们往往苦恼于没有充实的社会经历.社会阅历,很难有较强的个人能力.个人魅力!就个人能力而言,本 人主要把它分为两种:“吸收能力”和“输出能力”.吸收能力主要体现了个人对外界知识的摄入能力, ...

  6. 几条sql语句

    1.行.列转换 --行转列 ),科目 ),分数 int) ) ) ) ) ) ) ) ) ) --方法1 select 姓名, end) as 语文, end) as 数学, end) as 物理 f ...

  7. windows phone版的一个儿教app

    昨天下午看见一个园友写的一篇关于儿教的api,看了也就两三个接口,所以数据处理应该不会太复杂,主要是界面的效果,要求可能比较高.于是我就重新自己写了一个app,实现很简单,花的时间比较多的地方应该是在 ...

  8. EF 随机排序

    /// <summary> /// 数据上下文扩展 /// </summary> public partial class dbDataContext : IUnitOfWor ...

  9. 三星Galaxy Note 10.1 N8010 最后的救赎 Andorid 5.0.2 ROM

    上市日期为2012年的三星Galaxy Note N8010 10.1采用10.1英寸TFT屏幕,分辨率为1280×800,支持10点触控,支持S pen手写笔功能.,拥有一颗1.4GHz Exyno ...

  10. Android实现SharePreferences和AutoCompletedTextView

    Android实现SharePreferences和AutoCompletedTextView 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 ...