这道题目在上半年ZOJ模拟上年青岛赛区ACM题的时候就已经出现了。当时我不会写,本来想着赛后补题的最后因为懒惰又没补。

现在这道题又出现了。这是上天对我的惩罚啊!!!

所以这次铁了心也要补这题。然后我就找广工某大佬要了份题解,看得是一脸懵逼啊!

这个图就是算法的核心思想:将其分成9个多叉树,每颗树里面也能继续分。所以如果给出n,k。可以根据n计算每个树的大小,然后通过k跟这些树的大小比较,最后找到目标树,再在这颗树里面找到我们需要的答案。

PS:由于刚刚同学反映我写的看不懂,所以又重新写了一遍(希望没错,且你们能看得懂把!!!)

#include <bits/stdc++.h>
using namespace std;
#define re register
#define ll long long
void read(int &a)
{
a=;
int d=;
char ch;
while(ch=getchar(),ch>''||ch<'')
if(ch=='-')
d=-;
a=ch-'';
while(ch=getchar(),ch>=''&&ch<='')
a=a*+ch-'';
a*=d;
}
void write(int x)
{
if(x<)
putchar(),x=-x;
if(x>)
write(x/);
putchar(x%+'');
}
const int L=;
int f[L],a[L],ten[L],cnt;///f存满十叉树的一共节点数,ten存当前层数的节点数
void geta(int n)
{
cnt=;
while(n)
{
a[cnt++]=n%;
n/=;
}
}
int main()
{
f[]=ten[]=;
for(re int i=;i<L;i++)
{
f[i]=f[i-]*+;
ten[i]=ten[i-]*;
}
int T;
read(T);
while(T--)
{
int n,k;
read(n);
read(k);
geta(n);
int ans=,cmp=;
for(re int i=cnt-;i>=&&k;i--)///枚举层数
for(re int d=(ans==);d<;d++)///ans==0作用:因为第一位数不可能为0,所以第一个循环从1开始,之后的位数从0开始。
{
int siz=;
if(==cmp)
{
if(d<a[i])///若当前位置比a[i]小,说明d这颗树是有i层的满多叉树
siz=f[i];
else if(d==a[i])///相等则可能在中间某一段就停止的,就像样例中n==15,在1节点的完全多叉树中,但到15就结束了。
siz=f[i-]+n-(ans*+d)*ten[i]+;///计算这颗树有多少个点(这个公式分两部分看,f[i-1]就是确定的个数,之后不确定的个数通过总数n去减其他树的和就得到了)
else///若当前位置比a[i]大,那么在这之前肯定已经做过d==a[i]的,说明在那个之后后面的树只能是f[i-1](因为第一棵树的第三层已经排了,说明其他树第二层排满)
siz=f[i-];
}
else if(cmp==-)
siz=f[i];
else
siz=f[i-];
if(k>siz)///如果k比这颗树的节点大,很明显他就在下一颗树上。
k-=siz;
else///在这一颗树上向上找
{
k--;///向上找只需要减一就行了
ans=ans*+d;///很明显,在这颗树上的话,这颗树的第一个点肯定是d
if(==cmp)
cmp=(d>a[i])-(d<a[i]);///若出现d>a[i],则第一个肯定不是满二叉树,但他导致算树节点总数多了一层,所以要减一层。
break;
}
}
printf("%d\n",ans);
}
return ;
}

zyb的面试(广工14届比赛)的更多相关文章

  1. Count(广工14届竞赛)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6470 这道题目题解就扔了个矩阵快速幂啥都没写.....这题解是太看得懂我这个弱鸡了. 既然是矩阵快速幂 ...

  2. Android反编译基础(apktoos)--广工图书馆APK

    更多精彩内容 :http://www.chenchuangfeng.com QQ:375061590 ------------------------------------------------- ...

  3. 【HDU6216】 A Cubic number and A Cubic Number 和 广工的加强版

    题目传送门_杭电版 题目传送门_广工版 广工版的是杭电版的加强版. 题意:判断一个质数是否是两个整数的立方差 ---- 数学题 题解: 根据立方差公式:\(a^3 - b^3 = (a - b)(a^ ...

  4. 广工十四届校赛 count 矩阵快速幂

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6470 题意:求,直接矩阵快速幂得f(n)即可 构造矩阵如下: n^3是肯定得变换的,用二项式展开来一点 ...

  5. HDU 6468 zyb的面试

    http://acm.hdu.edu.cn/showproblem.php?pid=6468 题目 今天zyb参加一场面试,面试官听说zyb是ACMer之后立马抛出了一道算法题给zyb:有一个序列,是 ...

  6. zyb的面试

    今天zyb参加一场面试,面试官听说zyb是ACMer之后立马抛出了一道算法题给zyb:有一个序列,是1到n的一种排列,排列的顺序是字典序小的在前,那么第k个数字是什么?例如n=15,k=7, 排列顺序 ...

  7. 谷歌技术面试要点(Google面试)(14年5月20日交大专场)

    技术面试的主题 1.简要自我介绍: 姓名.学校.专业 做过的项目与实习 个人主要成就 2.技术评估: 构建与开发算法 编程 计算机基础知识 数据结构 现实世界问题解决能力 设计问题(主要针对博士生) ...

  8. 广工赛-hdu6468构造十叉树

    是个以前没见过的模板题.. 我用比较复杂度方式过掉了.. 构造一个十叉树(有点trie的味道)来存数字,然后字典序就是先序遍历的结果 #include<bits/stdc++.h> usi ...

  9. 广工赛-hdu6469-树链压缩/二分

    比较复杂的一题.. 不管是二分答案还是直接做,都需要压缩树链 /* 给定n种怪物,每个怪物有属性a[i] 打死第i种怪物后,第i只怪物会分裂成a[i]个第i-1种怪 如果打死的是第1种,那么获得经验a ...

随机推荐

  1. js 使用a标签 下载资源

    文档 let data = new Blob(['hello ajanuw'], { type: 'application/text' }) let src = window.URL.createOb ...

  2. C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)

    一.通过WebClient获取网页内容 这是一种很简单的获取方式,当然,其它的获取方法也很简单.在这里首先要说明的是,如果为了实际项目的效率考虑,需要考虑在函数中分配一个内存区域.大概写法如下 //M ...

  3. WordOperate

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  4. iBatis System.ArgumentNullException : 值不能为 null。 参数名: path2

    System.ArgumentNullException : 值不能为 null. 参数名: path2 在app.config 或 web.config 中加上配置就可以了 <appSetti ...

  5. JavaScript三种弹出框(alert,confirm和prompt)用法举例

    http://blog.csdn.net/lucky51222/article/details/45604681 我们在做网页交互的时候往往需要用户在操作之前弹出一个提示消息框来让用户做一些点击才能继 ...

  6. MySQL之视图、触发器、事务、存储过程、函数 流程控制

    MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...

  7. vsftpd上传文件出现553 Could not create file错误解决方法

    1.确定目录权限 2.关闭selinux

  8. java mvc spring boot

    spring mvchttp://www.cnblogs.com/wcf6676/p/5333352.html 利用mybatis-generator自动生成代码http://www.cnblogs. ...

  9. [archlinux][crypto] 从T450迁移archlinux操作系统至T460s笔记本

    从T450笔记本迁移archlinux操作系统之T460s笔记本,同时: 1.  使用cryptsetup做底层块加密. 2.    全新使用btrfs文件系统. 一,硬盘分区. 1T的SSD,使用U ...

  10. 终于碰到iOS对象集合深拷贝的坑

    从原始数组,拆分排列组合成新数组,同时给新的数组中的模型元素追加字段,数组的容量翻倍,如果不用深拷贝,后面追加的值就把前面的值覆盖了 UnitModel *model1 = [UnitModel ne ...