热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hdu5573BinaryTree思维构造

http:acm.split.hdu.edu.cnshowproblem.php?pid5573题意:满二叉树,节点x左儿子标号是2*x,右儿子标号是2*x+1,每个节点权值即

http://acm.split.hdu.edu.cn/showproblem.php?pid=5573

题意:满二叉树,节点x左儿子标号是2*x,右儿子标号是2*x+1,每个节点权值即标号,从1号节点开始,走一段长度为k的路径,自己选择每个节权值加或减,问最后能不能凑成n

想了很久都没思路,甚至还想到了打表找规律,徒劳。。。。。。

看了题解,发现。。。。。。

。。。。。稍微拐个歪就能想到啊。。。

题目保证了n<=2^k

这样我们发现仅需要最左边这条链就可以了

1,2,4,8,16,。。。

容易想到二进制拆分,但由于定义的原因,每个节点必须选择加或是减,直接对n拆分不可行,在仔细考虑一个加号变为减号,少掉的是这个节点值的二倍

为什么要选择最左边这条链呢,因为权值代表了二进制的每一位,可以组合成范围内的任意数,那么我先把所有都置为正数,结果是2^k-1,当n比他小时,是不是只需要减掉一定的数就可以了,而刚刚已经分析了把一个节点置为负,是要减掉权值的二倍,这样我们只能减去一个偶数,可能还会剩1,怎么办呢,会发现只需要判断下奇偶改一下最后一个节点就可以了,把最后一个节点选右儿子,可以比选左儿子多1,上面减时在多减一个2,不就把这个1去掉了

当n比他大时,似乎只有n=2^k一个情况,最后一个选右儿子即可

代码超短

#include
using namespace std;
int main()
{
    int T,n,k,tca=1;
    char ch[2]={'+','-'};
    cin>>T;
    while(T--)
    {
        scanf("%d%d",&n,&k);
        long long sum=(1ll<>1;
        printf("Case #%d:\n",tca++);
        for(int i=0;i 
 


推荐阅读
  • 题目编号:2049 [SDOI2008]Cave Exploration。题目描述了一种动态图操作场景,涉及三种基本操作:断开两个节点间的连接(destroy(a,b))、建立两个节点间的连接(connect(a,b))以及查询两节点是否连通(query(a,b))。所有操作均确保图中无环存在。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 线段树详解与实现
    本文详细介绍了线段树的基本概念及其在编程竞赛中的应用,并提供了一个具体的线段树实现代码示例。 ... [详细]
  • 编译原理中的语法分析方法探讨
    本文探讨了在编译原理课程中遇到的复杂文法问题,特别是当使用SLR(1)文法时遇到的多重规约与移进冲突。文章讨论了可能的解决策略,包括递归下降解析、运算符优先级解析等,并提供了相关示例。 ... [详细]
  • 在现代Web开发中,HTML5 Canvas常用于图像处理和绘图任务。本文将详细介绍如何将Canvas中的图像导出并上传至服务器,适用于拼图、图片编辑等场景。 ... [详细]
  • Java中字符串截取方法详解
    本文详细介绍了Java中常用的字符串截取方法及其应用场景,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
author-avatar
手机用户2702935897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有