hdu5573 Binary Tree (构造)
来源:互联网 发布:java开发界面化软件 编辑:程序博客网 时间:2024/04/30 11:58
题目:
一棵二叉树,根节点是1,往后依次左节点是2*i, 右节点是2* i+1。现从根节点开始往下走,走k个节点,每个节点可取正数或负数,问能否求和凑出n?
分析:
因为还要输出路径,和每个数取正还是取负,就感觉应该是个构造或找规律的题,否则不好记录路径。又有
构造方法如下:我们知道前k层的第一个数,
考虑一个问题,假如sum是偶数,那么毫无问题,直接凑出d即可。
若sum是奇数,那么我们让sum+1变偶数,然后再正常去掉d,但是这样我们去掉了(sum+1),多去了1,怎么办?只需要让最后一个节点走的时候走到右儿子即可。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <queue>#include <stack>#include <set>#include <map>#include <algorithm>using namespace std;#define ms(a,b) memset(a,b,sizeof(a))const int inf = 0x3f3f3f3f;int n, k, sign[65];int main(){ int t; scanf("%d", &t); for(int tt=1;tt<=t;tt++){ ms(sign, 0); // 0是+ scanf("%d%d", &n, &k); long long tmp = ((long long)1 << k)-1-n; int flag = 0; if(tmp&1){ tmp++; flag = 1; } for(int i=1;i<=k;i++){ sign[i] = (tmp>>i)&1; } printf("Case #%d:\n", tt); for(int i=1;i<=k-1;i++){ printf("%d %c\n", (1<<(i-1)), sign[i] ? '-':'+'); } if(!flag){ printf("%d +\n", (1<<(k-1))); } else{ printf("%d +\n", (1<<(k-1))+1); } } return 0;}
阅读全文
0 0
- HDU5573 Binary Tree(构造)
- hdu5573 Binary Tree (构造)
- HDU5573 Binary Tree
- HDU5573 Binary Tree
- hdu5573 binary tree
- hdu5573 Binary Tree 二进制
- Binary Tree(构造)
- 【HDU5573 2015上海赛区B】【构造 二进制思想】Binary Tree 二叉树上走m层加减数使得最后权值恰为n
- HDU5573-二进制思想-构造
- hdu 5573 Binary Tree(构造)
- HDU 5573 Binary Tree【构造】
- HDU 5573 Binary Tree 构造
- hdu 5573 Binary Tree 构造
- HDU 5573-Binary Tree (构造)
- HDU 5573 Binary Tree ACM/ICPC 2015 Shanghai(构造)
- Algorithm:BST(Binary Search Tree)构造
- Hdu-5573 Binary Tree(贪心构造)
- HDU-5573 Binary Tree(构造/二进制)
- JAVA的泛型特性和反射机制在泛型中的简单运用
- 动态代理之Proxy.newProxyInstance()
- 滤波器设计指标
- 使用Tensorflow构建和训练自己的CNN来做简单的验证码识别
- PCB线路板板布局布线基本规则|深圳市百丽特
- hdu5573 Binary Tree (构造)
- spark常用算子的简单使用
- NEUQACM OJ 1008: C基础-公约公倍
- windows 安装xgboost
- Python的切片操作是深拷贝还是浅拷贝?
- LeetCode 328. Odd Even Linked List (Medium)
- 浅谈类的六个默认成员函数和隐含的this指针
- 读书 | 从行动开始,意志力差只是失败者的借口
- python 遍历文件夹中所有文件