zoukankan      html  css  js  c++  java
  • Comet OJ 夏季欢乐赛 完全k叉树

    完全k叉树

    https://cometoj.com/contest/59/problem/A?problem_id=2712

    题目描述

     

    欢迎报考JWJU!这里有丰富的社团活动,比如为梦想奋斗的ACM集训队,经常组织飞行棋的桌游协会,喜欢“唱,跳,rap,篮球”的篮球协会,更奇特的是——让人耳目一新的攀树协会。顾名思义,攀树协会会经常组织大家攀爬一些树,比如李超树,左偏树,带花树,智慧树等等。经过社团组织的一番培训后,同学们已经学会了如何在树上的相邻结点中来回爬动。

    不过上述的树太没意思了,RegenFallenRegenFallen同学向往更刺激的挑战,今天他要挑战的项目是一棵完全 kk 叉树。

    完全kk叉树的定义:一个 mm 层的完全 kk 叉树的前 m-1m1 层均为满 kk 叉树,且第 mm 层的结点全部聚集在树的左侧。

    因为RegenFallenRegenFallen是一个持久的男人,所以他希望一次能爬尽量长的路径(不走重复的点),所以他想让你告诉他,假如现在有一棵 nn 个点的完全 kk 叉树,每条边的长度均为 11,从树上的某一点到另一点的最大距离是多少。

     
     

    输入描述

     

    第一行给出一个 tt (t≤10^{4}t104) 代表测试用例的组数。

    接下来t行,每行包含两个正整数 k, nk,n (1 le k le 10^9, 2 le n le 10^91k109,2n109) 意义如题面所示。

    输出描述

     

    对于每个测试用例,输出一行一个正整数表示答案。

    样例输入 1 

    1
    2 3

    样例输出 1

    2

    提示

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

    模拟题,累加层数分类讨论可AC

    CODE;

    #include<cstdio>
    #define ll long long
    using namespace std;
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            ll k,n;
            scanf("%lld%lld",&k,&n);
            if(k==1)
            {
                printf("%lld
    ",n-1);
                continue;
            }
            ll temp=1,cnt=0;
            while(n)
            {
                n-=temp;
                cnt++;
                temp*=k;
                if(n<temp)
                    break;
            }
            if(n==0)
                printf("%lld
    ",cnt*2-2);
            else if(n<=temp/k)
                printf("%lld
    ",cnt*2-1);
            else
                printf("%lld
    ",cnt*2);
        }
        return 0;
    }
  • 相关阅读:
    数据类型装换
    变量及数据类型
    27 网络通信协议 udp tcp
    26 socket简单操作
    26 socket简单操作
    14 内置函数 递归 二分法查找
    15 装饰器 开闭原则 代参装饰器 多个装饰器同一函数应用
    12 生成器和生成器函数以及各种推导式
    13 内置函数 匿名函数 eval,exec,compile
    10 函数进阶 动态传参 作用域和名称空间 函数的嵌套 全局变量
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11262466.html
Copyright © 2011-2022 走看看