题目描述
欢迎报考JWJU!这里有丰富的社团活动,比如为梦想奋斗的ACM集训队,经常组织飞行棋的桌游协会,喜欢“唱,跳,rap,篮球”的篮球协会,更奇特的是——让人耳目一新的攀树协会。顾名思义,攀树协会会经常组织大家攀爬一些树,比如李超树,左偏树,带花树,智慧树等等。经过社团组织的一番培训后,同学们已经学会了如何在树上的相邻结点中来回爬动。
不过上述的树太没意思了,RegenFallen同学向往更刺激的挑战,今天他要挑战的项目是一棵完全 k 叉树。
完全k叉树的定义:一个 m 层的完全 k 叉树的前 m−1 层均为满 k 叉树,且第 m 层的结点全部聚集在树的左侧。
因为RegenFallen是一个持久的男人,所以他希望一次能爬尽量长的路径(不走重复的点),所以他想让你告诉他,假如现在有一棵 n 个点的完全 k 叉树,每条边的长度均为 1,从树上的某一点到另一点的最大距离是多少。
输入描述
第一行给出一个 t (t≤1e4) 代表测试用例的组数。
接下来t行,每行包含两个正整数 k, n (1 <= k <= 10^9, 2 <= n <= 10^9) 意义如题面所示。
输出描述
对于每个测试用例,输出一行一个正整数表示答案。

样例输入
1
2 3
样例输出
2

提示
样例给出了一个3个点的完全二叉树,即第一层有一个点,第二层有两个点。那么可以选择第二层的两个点来计算距离,其距离为2,即为树上的最大距离。

思路:以3叉树为例,首先需要计算出树的深度以及是不是满n叉树。
有以下两种种情况。是满n叉树或者不是满n叉树但是最后一层剩下的结点有在第2,3棵大子树上面(比如3叉树 结点8 9 10 都在第二棵大子树上),其最大的距离就是左下角到最后一个结点,为k-1+k-1-1。其他情况就是最左下的结点和最右侧最下面结点的距离,为k-1+k-1。(具体注释看代码)

注意 3 10和样例3 8还有特判1的情况;

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <sstream>
#include <cstdio>
#include <vector>
#include <string>
#include <cmath>
#include <stack>
#include <queue>
#include <map>
#include <set>
#define MAX 0x3f3f3f3f
#define fori(a,b) for(int i=a;i<=b;i++)
#define forj(a,b) for(int j=a;j<=b;j++)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const double PI = acos(-1);
const int M=1e5+10;
#define inf 0x3f3f3f
int main()
{ll  T,n,m,mod,i,k,flag=0,ans=1,p;scanf("%lld",&T);while(T--){scanf("%lld%lld",&n,&m);if(n==1){printf("%lld\n",m-1);continue;}p=n;//p是当前深度上是满的情况下结点的个数k=1;//k是树的深度m=m-1;//m是当前结点剩余个数int flag=0;//树是满叉数while(1){if(m-p>=0){k+=1;m-=p;p*=n;}elsebreak;}if(m!=0)//还有剩余的结点{k+=1;p/=n;if(m<=p)//结点都在第一棵大子树上面flag=1;}if(flag==1)printf("%lld\n",k-1+k-1-1);elseprintf("%lld\n",k-1+k-1);}return 0;
}

A 完全k叉树(CCPC-Wannafly Comet OJ 夏季欢乐赛(2019))相关推荐

  1. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)比赛总结

    CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)比赛总结 总结: ​ 这场比赛不太顺心,B,I水题 10分钟内A了.A题推公式用double写卡了1个小时,换成其他暴力 ...

  2. 完全k叉树(CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) A)

    题目描述 欢迎报考JWJU!这里有丰富的社团活动,比如为梦想奋斗的ACM集训队,经常组织飞行棋的桌游协会,喜欢"唱,跳,rap,篮球"的篮球协会,更奇特的是--让人耳目一新的攀树协 ...

  3. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)

    感觉自己代码能力好弱啊 T1 完全k叉树 传送门 Solution 首先特判一下K=1K=1K=1 然后处理出最大满KKK叉树,设这棵树的深度为rankrankrank,根节点的深度为000,这个时候 ...

  4. Comet OJ CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)

    Preface 在一个月黑风高的夜晚我这个蒟蒻正踌躇着打什么比赛好 是继续做一场AGC,还是去刷一场CF 然后,一道金光闪过(滑稽),我们的红太阳bzt给我指明了方向: 你太菜了,我知道有一场很水的比 ...

  5. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)A——完全k叉树

    题目描述 欢迎报考JWJU!这里有丰富的社团活动,比如为梦想奋斗的ACM集训队,经常组织飞行棋的桌游协会,喜欢"唱,跳,rap,篮球"的篮球协会,更奇特的是--让人耳目一新的攀树协 ...

  6. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)E

    题面 这个题暴好啊,考了很多东西. 首先设f(x)为离终点还有x步要走的期望步数,我们可以发现 : 1.x>=k时,x可以转移到的点的下标都<x. 2.x<k时,则可能走回到x或者下 ...

  7. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)E.飞行棋(期望dp+矩阵快速幂)

    题目 飞行棋的规则如下: 1.每名玩家有一个棋子,每个回合可以掷一次骰子. 2.如果使用的骰子为 k面,则这 k面上的点数分别为 1,2,3,-,k,且掷得每种点数的概率均为​. 3.如果当前回合掷得 ...

  8. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) 飞行棋

    https://www.cometoj.com/contest/59/problem/E?problem_id=2714 思路:高斯消元求dp[1]~dp[k-1];然后利用递推式矩阵快速幂求出dp[ ...

  9. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)部分题解

    茶颜悦色 题意 固定kkk的矩形,能最多框住多少个点. 题解 假如我们固定一个矩形,以左下角为坐标. 这样子对于(a,b)(a,b)(a,b),那么能够包括到这个点的矩形左下角的范围: x∈(a−k, ...

最新文章

  1. Kubernetes集群部署(yum部署)
  2. 算法基础知识科普:8大搜索算法之红黑树(上)
  3. [C]字符串排序之-冒泡法
  4. Leetcode 844. 比较含退格的字符串 解题思路及C++实现
  5. android中的标题栏是什么意思,Android通用标题栏组合控件
  6. mysql sql字符串连接函数_Mysql字符串连接函数 CONCAT()与 CONCAT_WS()
  7. java填空题 在非静态成员方法中_成本加成定价法的优点有
  8. linux安全 4a标准_Linux的未来,提高安全性的开放标准等等
  9. javascript 页面刷新
  10. 我眼中的分布式系统可观测性
  11. 渣渣的leetcode刷题笔记-树(1)
  12. Linux系统下文件与目录操作
  13. 地理空间数据云下载的单波段合成及去黑边
  14. 将A3排版的PDF内容转成A4纸张
  15. 计算机选购知识,计算机知识讲座(9):硬盘的选购
  16. 选择第K大元素(快排、快选以及k-选取比较)
  17. VS2019左侧 黄、绿线条 以及 错误波浪线 隐藏
  18. html新增和删除行,html5页面结构的变化以及增加和删除标签的总结
  19. 2021最新Android开发者学习路线,已整理成文档
  20. Java Class类文件的结构

热门文章

  1. OSPF与BGP联动
  2. 打码指南-由猫眼线下扫码1分购谈起 | 掘金直播 小程序专场分享总结
  3. GSM信令流程[转]相当不错
  4. 图像灰度、亮度、强度区分
  5. 给bootstrap-treeview增加点击事件,单击菜单也能展开和折叠
  6. 计算机网络--自顶向下方法 学习笔记之计算机网络和因特网
  7. 2021-05-21--0515周考
  8. 人们愿意购买亲手摸过的商品
  9. MOBA摄像机表现及交互式操作
  10. 03前端第三章Javascript