【HDU 5573】Binary Tree
来源:互联网 发布:小黄鸭淘宝客筛选软件 编辑:程序博客网 时间:2024/05/16 14:42
The Old Frog King lives on the root of an infinite tree. According to the law, each node should connect to exactly two nodes on the next level, forming a full binary tree.
Since the king is professional in math, he sets a number to each node. Specifically, the root of the tree, where the King lives, is1 . Say froot=1 .
And for each nodeu , labels as fu , the left child is fu×2 and right child is fu×2+1 . The king looks at his tree kingdom, and feels satisfied.
Time flies, and the frog king gets sick. According to the old dark magic, there is a way for the king to live for anotherN years, only if he could collect exactly N soul gems.
Initially the king has zero soul gems, and he is now at the root. He will walk down, choosing left or right child to continue. Each time at nodex , the number at the node is fx (remember froot=1 ), he can choose to increase his number of soul gem by fx , or decrease it by fx .
He will walk from the root, visit exactlyK nodes (including the root), and do the increasement or decreasement as told. If at last the number is N , then he will succeed.
Noting as the soul gem is some kind of magic, the number of soul gems the king has could be negative.
GivenN , K , help the King find a way to collect exactly N soul gems by visiting exactly K nodes.
Since the king is professional in math, he sets a number to each node. Specifically, the root of the tree, where the King lives, is
And for each node
Time flies, and the frog king gets sick. According to the old dark magic, there is a way for the king to live for another
Initially the king has zero soul gems, and he is now at the root. He will walk down, choosing left or right child to continue. Each time at node
He will walk from the root, visit exactly
Noting as the soul gem is some kind of magic, the number of soul gems the king has could be negative.
Given
Every test case contains two integers
Then
It's guaranteed that there are at least one solution and if there are more than one solutions, you can output any of them.
25 310 4
Case #1:1 +3 -7 +Case #2:1 +3 +6 -12 +
1, 2, 4, 2^k可以构造出所有小于2^(k + 1)的数,
本来想构造二叉树来解题,树都建好了,大佬忽然告诉我这道题不需要建树,再看一下数据,太大,哪怕剪枝都要超时,百度了一下发现是二进制的构造问题
求出sum后,根据sum - n来确定最后一个数取2^k或2^k + 1,最后根据x的二进制判断正负号
AC代码:
#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<stdio.h>#include<vector>using namespace std;typedef long long ll;ll N, ans;int K, sum, x;int main(){ int T, k = 1; scanf("%d", &T); while(T--) { scanf("%I64d %d", &N, &K); cout<<"Case #"<<k++<<": "<<endl; if(N & 1) { sum = (1 << K) - 1; //(2 ^ K) - 1 x = (sum - N) / 2; for(int i = 0; i < K; i++) { cout<<(1 << i)<<" "; if(x & 1) cout<<"-"<<endl; else cout<<"+"<<endl; x >>= 1; } } else { sum = (1 << K); x = (sum - N) / 2; for(int i = 0; i < K - 1; i++) { cout<<(1 << i)<<" "; if(x & 1) cout<<"-"<<endl; else cout<<"+"<<endl; x >>= 1; } cout<<(1 << K - 1) + 1<<" "; if(x & 1) cout<<"-"<<endl; else cout<<"+"<<endl; } } return 0;}
阅读全文
0 0
- hdu 5573Binary Tree
- hdu 5573 Binary Tree
- hdu 5573 Binary Tree
- 【HDU 5573】Binary Tree
- HDU 5573 Binary Tree
- HDU 5573 Binary Tree【构造】
- HDU 5573 Binary Tree 构造
- hdu 5573 Binary Tree 构造
- hdu 5573Binary Tree(二进制)
- HDU 5573-Binary Tree (构造)
- hdu 5573 Binary Tree(构造)
- hdu 5573 Binary Tree【思维+递推】
- HDU 5573 Binary Tree 找规律二进制
- Hdu-5573 Binary Tree(贪心构造)
- 【规律】【贪心】【数学】HDU 5573 Binary Tree
- HDU-5573 Binary Tree(构造/二进制)
- HDU 5573 Binary Tree(规律题)
- hdu 5573 Binary Tree【脑洞构造】
- JSP实现时间倒计时
- Eclipse中如何修改Java代码注释的样式和如何提取出注释文档
- saiku的简单配置及使用
- HDU 4990 Reading comprehension(找规律+矩阵快速幂)
- centos6.8 安装python3/pip3/sqlite3步骤详解
- 【HDU 5573】Binary Tree
- Qt自定义菜单栏
- Android计步模块(类似微信运动)
- 自定义Drawable实现灵动的红鲤鱼动画(上篇)
- if-else重构与设计模式
- 设计模式-行为型软件设计模式(二)
- 北京大学可视化发展前沿研究生暑期学校Day5
- PCB layout学习路线
- AngularJS指令参数详解