[补题记录] Atcoder Beginner Contest 321(E)

news/2024/7/5 2:13:24

URL:https://atcoder.jp/contests/abc321

目录

E

Problem/题意

Thought/思路

Code/代码


E

Problem/题意

有一颗 N 个节点的完全二叉树,现在给出节点 X,一个整数 K,问举例节点 X 的长度为 K 的点有多少个?

Thought/思路

来自:https://www.cnblogs.com/Lanly/p/17725350.html

首先考虑以节点 X 为根的子树,求出往下 K 层的左端点和右端点,再与 N 比较大小即可求出这颗子树的答案;

其次考虑与 X 同一个父亲的节点,按照前面求子树的方法求它的答案;

不断往 X 的父节点考虑,求与 X 对称的点的子树答案,直到 X = 1 或者 K == 0,此时若 K == 0,则说明当前的 X 作为单独一个点的答案。

Code/代码

 

#include "bits/stdc++.h"

#define int long long

__int128 n;

__int128 solve(__int128 x, __int128 k) { // 处理以 x 为根的子树
	if (k > 64 or k < 0) return 0;

	__int128 len = (1ll << k), l = (x << k);
	__int128 r = l + len - 1;

	if (l > n) return 0;
	if (r > n) {
		return n - l + 1;
	} else {
		return r - l + 1;
	}
}

__int128 read() {
    __int128 x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9') {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9') {
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}

void print(__int128 x) {
    if(x < 0) {
        putchar('-');
        x = -x;
    }
    if(x > 9) print(x / 10);
    putchar(x % 10 + '0');
}

signed main() {
	int t; std::cin >> t;
	while (t --) {
		__int128 x , k;
		n = read();x = read();k = read();
		
		int ans = 0;
		// 先求 x 的子树
		if (k) ans += solve(x, k);
		// 不断求 x 的父节点的另一个节点,即另一颗子树
		while (x > 1 and k > 0) {
			k -= 1; // 往上一层
			ans += solve((x ^ 1), k - 1); // 以 x 的父节点的另一个节点为根的子树
			x /= 2;
		}
		// 某个父节点时 k == 0
		if (x and k == 0) ans ++;

		print(ans);
		std::cout << "\n";
	}
}


http://lihuaxi.xjx100.cn/news/1571479.html

相关文章

【LeetCode热题100】--238.除自身以外数组的乘积

238.除自身以外数组的乘积 思路&#xff1a; 利用索引左侧所有数字的乘积和右侧所有数字的乘积&#xff08;即前缀和后缀&#xff09;相乘得到答案 算法&#xff1a; 1.初始化两个空数组L和R&#xff0c;对于给定索引i&#xff0c;L[i]代表的是i左侧所有数字的乘积&#xff…

【算法小课堂】滑动窗口

滑动窗口 基本概念&#xff1a; 滑动窗口本质是双指针算法的一种演变 本质上就是同向双指针&#xff0c;窗口的范围就是[left,right&#xff09; 滑动窗口大致可以分为两类 窗口大小不变的窗口大小变化的 滑动窗口遇到一些验证重复性的问题的时候可以用哈希表来优化 核心思想…

​全球人类读书会《乡村振兴战略下传统村落文化旅游设计》中国建筑出版传媒许少辉博士著作

​全球人类读书会《乡村振兴战略下传统村落文化旅游设计》中国建筑出版传媒许少辉博士著作

接口自动化测试数据驱动DDT模块使用

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程&#xff0c;刷完面试就稳了&#xff0c;你也可以当高薪软件测试工程师&#xff08;自动化测试&#xff09; 一、DDT简单介绍 名称&#xff1a; Data-Driven Tests&#xff0c;数据驱动测试 作用&#xff1a; 由外部…

SpringMvc-HttpMessageConverter接口

虽然本文命题是HttpMessageConverter&#xff0c;但是常用的场景是修改字段值&#xff0c;如果不是&#xff0c;那你自定义Converter是为了什么&#xff1f;&#xff1f;&#xff1f; HttpMessageConverter是也是数据绑定接口&#xff0c;它负责实现HandlerMethodArgumentReso…

完成“重大项目”引进签约,美创科技正式落户中国(南京)软件谷

近日&#xff0c;美创科技正式入驻中国&#xff08;南京&#xff09;软件谷&#xff0c;并受邀出席中国南京“金洽会"之“雨花台区数字经济创新发展大会”。美创科技副总裁罗亮亮作为代表&#xff0c;在活动现场完成“重大项目”引进签约。 作为国家重要的软件产业与信息服…

JackJson多态

JsonTypeInfo 处理多态、序列化对象类型_赵丙双的博客-CSDN博客 JsonTypeInfo实现jackson的多态解析_MonkeyKing_sunyuhua的博客-CSDN博客 Java Jackson JsonTypeInfo 多态类型处理 - 简书 JsonTypeInfo 逻辑名称 JsonSubTypes、JsonTypeName_赵丙双的博客-CSDN博客

IoT 设备物联网通信中 NB-IoT、Cat.1、Cat.M 如何选型?

本篇文章介绍了物联网通信中涉及的NB-IoT、LTE-Cat.1 和 LTE-M &#xff0c;三种通信技术的各自优势&#xff0c;以及应用场景。 01 什么是 NB-IoT NB-IoT窄带物联网(Narrow Band Internet of Things)是 IoT 领域一个新兴的技术&#xff0c;支持低功耗设备在广域网的蜂窝数据连…