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

题意:
给出一个满二叉树,根节点权值为1,左儿子为2*val,右儿子为2*val+1。现在有只青蛙从根节点出发,一步步往下走,在每个节点它都要选择加上该点的权值还是减去该点的权值,如果正好经过k个节点时总的权值和为n,那么这只青蛙就成功了,需要输出方案。

思路:

这道题目要注意到n<=(1<<k)。

所以如果每次都走这棵二叉树的左节点的话,权值就是1,2,4,8,10,那么它就可以组成小于(1<<k)的所有偶数,如果组成所有奇数的话,只要最后一步走右节点即可。

现在设走左节点的权值和是sum,那么多余的部分就是sum-n,那么我们只需要把(sum-n)/2这部分变成负数就可以,那么这里就又存在一个问题了,就是sum-n有可能是奇数,如果是这种情况的话就让最后一步走右节点,这样的话sum-n就又变成偶数了。

那么怎么去凑(sum-n)/2呢,很简单,还是根据二进制,相应位的节点改为负即可。

 #include<iostream>
#include<cstdio>
using namespace std;
const int maxn = +;
typedef long long ll; int n, k;
int a[maxn]; int main()
{
//freopen("in.txt","r",stdin);
int T;
int kase = ;
scanf("%d",&T);
while(T--)
{
bool flag = false;
scanf("%d%d",&n,&k);
ll sum = (<<k)-;
ll rest = sum - n;
if(rest&) {flag = true; rest++;}
rest/=;
for(int i=;i<k;i++)
{
if(rest&((ll)<<i)) a[i]=;
else a[i]=;
}
printf("Case #%d:\n",++kase);
for(int i=;i<k;i++)
{
if(i!=k-) printf("%lld ",(ll)<<i);
else if(flag) printf("%lld ",(ll)(<<i)+);
else printf("%lld ",(ll)<<i);
if(a[i]) puts("+");
else puts("-");
}
}
return ;
}

HDU 5573 Binary Tree(构造题)的更多相关文章

  1. HDU 5573 Binary Tree 构造

    Binary Tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5573 Description The Old Frog King lives ...

  2. HDU 5573 Binary Tree【构造】

    几天前模拟区域赛的一道题,今天发现在草稿箱里直接补个博客. 感觉这还是一道很有意思的构造题. 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5573 ...

  3. 【规律】【贪心】【数学】HDU 5573 Binary Tree

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5573 题目大意: 从1走到第k层,下一层的数是上一层的数*2或者*2+1,可以选择加上或者减去走的数 ...

  4. HDU 5573 Binary Tree(找规律)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5573 题意:给你一个完全二叉树,节点为自然数的排列(第一行1,第二行2 3,第三行4 5 6 7... ...

  5. hdu 1710 Binary Tree Traversals 前序遍历和中序推后序

    题链;http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (J ...

  6. HDU 1710 Binary Tree Traversals (二叉树遍历)

    Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  7. HDU 1710 Binary Tree Traversals(树的建立,前序中序后序)

    Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  8. HDU 1710 Binary Tree Traversals(二叉树遍历)

    传送门 Description A binary tree is a finite set of vertices that is either empty or consists of a root ...

  9. hdu 6161--Big binary tree(思维--压缩空间)

    题目链接 Problem Description You are given a complete binary tree with n nodes. The root node is numbere ...

随机推荐

  1. 【转】Tomcat 快速入门

    本文转载自:https://www.cnblogs.com/jingmoxukong/p/8258837.html?utm_source=gold_browser_extension 目录 Tomca ...

  2. Android开源图表图形库K线图

    Android开源图表图形库K线图 web端k线图一般使用TradingView,android原生的一般是在MPAndroidChart 基础上做开发的,目前看到一个比较好的K线开源组件是KChar ...

  3. windows.onload和body的onload属性的区别

    关于windows.onload和body的onload属性的区别网上有些说法说的也不太统一,现在系统说下: 先看共同点: 都是body内容体加载结束执行: window.onload 内部方式可以 ...

  4. CentOS6.4下邮件服务器搭建

    CentOS6.4下邮件服务器搭建   linux下邮件服务器的搭建大致分为三个步骤 准备工作(真实的生产环境下需要) 发送服务器安装及配置 (Postfix) 接收服务器安装及配置(dovecot) ...

  5. 金九银十跳槽季,程序员面试点解析之Java专场

    前言 近年来Java工程师这个岗位炙手可热,市场需求大,学习Java的人也越来越多,所以IT企业与求职者的选择都比较多,那么IT企业在面试时都会提哪些问题呢.下面为大家分享 Java高级工程师面试阿里 ...

  6. Java用Jackson遍历json所有节点

    <!-- jackson begin --> <dependency> <groupId>com.fasterxml.jackson.core</groupI ...

  7. Spring Aop 代理

    AOP 面向切面编程 底层就是 动态代理模式 代理模式是java中常用的设计模式. 特点为:  1 委托类和代理类有相同的接口,或共同的父类(保证使用一样的方法) 2 代理类为委托类负责处理消息,并将 ...

  8. Servlet向JSP过渡

    表格中添加删除链接删除相关数据,在servlet这里用的是纯java代码,在纯java代码里面的输出里面添加类似前端拼接的东西.(删除链接,并根据id来删除相应数据)这里使用的纯servlet. 在o ...

  9. django field

    name=models.CharField(max_length=30,unique=True,verbose_name='姓 名')    birthday=models.DateField(bla ...

  10. Docker学习笔记之Docker的数据管理和存储

    0x00 概述 数据是应用程序重要的产出,所以很好的管理和存储数据,是对应用程序劳动结果的尊重.特别是在大数据时代,所有的数据都是重要的资产,保护好数据是每个开发者必须掌握的技能.我们知道,在 Doc ...