首页 > 其他分享 >[ABC321E] Complete Binary Tree

[ABC321E] Complete Binary Tree

时间:2023-11-27 19:47:20浏览次数:42  
标签:tmp Binary cnt int sum Tree ABC321E ans now

思路:第一次先把往后距离为 $k$ 的点算出来,然后再每次往前走一个,考虑 $k-i$ 的情况。(具体见代码注释)。

代码:

```cpp
#include <bits/stdc++.h>
using namespace std;
// head
int sum[100],head=0;
int n,x,k;
int ans;
void f(int now,int step) //从点 now 开始,往上距离 step 的点的个数
{
int cnt=0;
while(cnt<step){ //找到距离 step 的层数
if(now*2>n) break;
cnt++;
now*=2;
}
if(cnt>=step){ //判断距离是否合格
ans+=sum[cnt]; //相加
if(now+sum[cnt]-1>n) ans=ans-(now+sum[cnt]-1-n);
//因为有可能这一排并不全(缺几个点),所以要减掉。
}
}
signed main()
{
cin.tie(nullptr);
ios::sync_with_stdio(false);
int tmp=1;
while(tmp<1e18){
sum[head++]=tmp;
tmp*=2;
}
int q;cin>>q;
while(q--)
{
cin>>n>>x>>k;
if(k==0){cout<<"1"<<endl;continue;} //0特殊
ans=0;
if(x==1){ //1特殊,你也可以不特拎出来
f(x*2,k-1);
f(x*2+1,k-1);
cout<<ans<<endl;
continue;
}
f(x,k); //先以改点往上找一次
tmp=x;
int cnt=k-1;
while(tmp!=1&&cnt>=0){
if(cnt==0) {ans++;break;}
int tmp1=tmp;
tmp/=2;
cnt--;
if(tmp*2==tmp1) f(tmp*2+1,cnt); //判断左右子树
else f(tmp*2,cnt);
}
cout<<ans<<endl;
}
}
```
蒟蒻本人账号,~~可以去点个关注~~:[https://atcoder.jp/users/gangbengr]

标签:tmp,Binary,cnt,int,sum,Tree,ABC321E,ans,now
From: https://www.cnblogs.com/ziyistudy/p/17860244.html

相关文章

  • CF1900 C Anji's Binary Tree 题解
    LinkCF1900CAnji'sBinaryTreeQuestion给出一个树,每个节点上有一个字母L/R/U,从\(1\)号根节点开始,L表示接下来走到左节点,R表示接下来走到右节点,U表示接下载走到父节点问,最少修改几个节点上的字母使得从根节点走到叶子节点Solution定义\(F_x\)表示从\(x\)走到叶......
  • Top Tree
    总归要学的。先写一下理解比较困难的点。考虑SATT的建立过程:首先在树里面找到一个CompressTree,这个树满足中序遍历写下来是根簇路径深度从小到大排列,然后根簇路径上挂着的小簇Rake起来,这个Rake的过程是容易的,考虑对于每一个直接连接的小簇,把他变成子问题,然后给一个代表点(R......
  • TreeMap
    TreeMap是一个非常有用的数据结构,它实现了SortedMap接口,能够存储键值对,并根据键的自然顺序或者自定义顺序进行排序。TreeMap提供了快速且具有预测性的操作,对于需要有序键值对的场景来说非常适用。插入元素创建TreeMap的最基本方法是使用构造器。以下是一个例子:TreeMap<Integer......
  • vue ztree 的使用
    ztree是一个很经典的基于jquey开发的树结构编辑展示UI组件库。https://gitee.com/zTree/zTree_v3 gitee上有一个很适合vue使用的ztree封装库,https://gitee.com/astinlee_admin/Vue-Giant-Tree/tree/master 但是这个库有个问题。打包后的代码引入到项目中会报错。怎么办......
  • 4-基因家族的系统进化树-基于Windows系统上的iqtree
    今天来讲如何构建系统进化树,使用的软件是iqtree,这是一个基于最大似然法估算的建树软件,可以在Windows系统上运行。1,于此网址“http://www.iqtree.org/”自行下载,并解压。2,将已经鉴定好的自己的基因家族蛋白序列(fasta格式),先用MAFFT网站做多序列比对。我的蛋白序列文件命名是“Ptb......
  • 【11月LeetCode组队打卡】Task4--BinarySearchTree
    Review有数值有序树:lch<root<rch递归和迭代遍历不同于普通二叉树搜索BST700.二叉搜索树中的搜索有:返回以存储val节点为根的子树无:NULLAC1:递归参数和返回值:根节点&待寻值节点终止条件:根为空||匹配到val单层逻辑:有序树:从左到右搜索......
  • hutool 使用 TreeUtil 查询树型结构
    之前写过一篇用stream流实现查询树型结构的文章,现在以hutool中的TreeUtil再来实现一次,之前的帖子JavaStream流实现递归查询树型结构查询出所有数据,用父节点递归查询出所有子节点数据/***封装备注分类集合**@paramremarkTypeList备注分类集合*......
  • DPV Subtree
    题意给定一棵\(n\)个节点的线段树。任意黑白染色,求每个点被染成黑色且黑色点组成连通块的方案数。Sol考虑换根dp,钦定当前点作为根节点。\(f_i\)表示当前子树内的方案数。\(g_i\)表示子树外的方案数。\(f\)的转移显然是\(f_u=\prodf_v+1\)。考虑\(g\)的转移......
  • python tkinter treeview 操作示例
    1.建立Treeviewfromtkinterimport*fromtkinter.ttkimport*root=Tk()#建立Treeviewcolumns=(('ID',50),('S_ID',50),('S_NAME',120),('B_NAME',120),('Date_Taken',100),......
  • 【11月LeetCode组队打卡】Task3--BinaryTree
    树基本术语:节点的度:叶子节点=0分支节点:含有的子树个数节点关系:父,子,兄节点层次:根节点:1floor路径:两节点间经过的节点序列路径长度:路径上的边数树的分类:节点子树是否可以互换位置:有序树:从左到右各子树依次有序(不能互换无序树二叉......