hdu 5573Binary Tree
Binary Tree
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 251 Accepted Submission(s): 143
Special Judge
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 1.
Say froot=1.
And for each node u,
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 another N 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 node x,
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 exactly K 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.
Given N, K,
help the King find a way to collect exactly N soul
gems by visiting exactly K nodes.
which indicates the number of test cases.
Every test case contains two integers N and K,
which indicates soul gems the frog king want to collect and number of nodes he can visit.
⋅ 1≤T≤100.
⋅ 1≤N≤109.
⋅ N≤2K≤260.
the case number and counts from 1.
Then K lines
follows, each line is formated as 'a b', where a is
node label of the node the frog visited, and b is
either '+' or '-' which means he increases / decreases his number by a.
It's guaranteed that there are at least one solution and if there are more than one solutions, you can output any of them.
5 3
10 4
1 +
3 -
7 +
Case #2:
1 +
3 +
6 -
12 +
题意:
给你一个n和k,要求用k层的完全二叉树,从根节点走到叶子节点,然后用走过的这k个数的加减组成n,多组解
输出一个结果即可
/*
开始实在是没想到什么方法,于是搜了一发GG.
后来看题解才发现N≤2K≤2^60这个条件很重要- -
我们只需要考虑二叉树最左边那条边,1 2 4 8 16 ......(好机智)
于是愉快地的开始写了
根据奇偶的不同再看是取最底端的左孩子或右孩子
对于左边所有节点求和t,dis = t-n能求出我们比预计多了多少
然后只要不加上dis/2即可
而且我们发现最左边 2^0,2^1,2^2.... ,所有把dis转换成2进制,有1的地方取‘-’即可
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std; int vis[10005];
int n,k;
int main()
{
int T;
int cas =1;
scanf("%d",&T);
while(T--)
{
printf("Case #%d:\n",cas++);
scanf("%d%d",&n,&k);
int t;
if(n % 2 == 0)
t = 1<<k ;
else
t = (1<<k) -1;
int dis = (t - n)/2;
memset(vis,0,sizeof(vis));
for(int i = k; i >= 0; i--)
{
if(1 & (dis >> i))
vis[i+1] = 1;
}
int cur = 1;
for(int i = 1; i < k; i++)
{
if(vis[i])
printf("%d %c\n",cur,'-');
else
printf("%d %c\n",cur,'+');
cur *= 2;
}
printf("%d %c\n",n%2 ? 1<<(k-1):(1<<(k-1))+1,vis[k] ? '-':'+');
}
return 0;
}
hdu 5573Binary Tree的更多相关文章
- hdu 5909 Tree Cutting [树形DP fwt]
hdu 5909 Tree Cutting 题意:一颗无根树,每个点有权值,连通子树的权值为异或和,求异或和为[0,m)的方案数 \(f[i][j]\)表示子树i中经过i的连通子树异或和为j的方案数 ...
- HDU 5044 Tree(树链剖分)
HDU 5044 Tree field=problem&key=2014+ACM%2FICPC+Asia+Regional+Shanghai+Online&source=1&s ...
- [HDU 5293]Tree chain problem(树形dp+树链剖分)
[HDU 5293]Tree chain problem(树形dp+树链剖分) 题面 在一棵树中,给出若干条链和链的权值,求选取不相交的链使得权值和最大. 分析 考虑树形dp,dp[x]表示以x为子树 ...
- HDU 4757 Tree(可持久化Trie+Tarjan离线LCA)
Tree Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others) Total Su ...
- HDU 4757 Tree 可持久化字典树
Tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4757 Des ...
- HDU 6228 - Tree - [DFS]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6228 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
- HDU 5909 Tree Cutting 动态规划 快速沃尔什变换
Tree Cutting 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5909 Description Byteasar has a tree T ...
- 2015 Multi-University Training Contest 8 hdu 5390 tree
tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...
- HDU 4757 Tree
传送门 Tree Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others) Prob ...
随机推荐
- 【iOS】OC-时间转化的时区问题
-(void)testTime{ NSDate *now = [NSDate date];//根据当前系统的时区产生当前的时间,绝对时间,所以同为中午12点,不同的时区,这个时间是不同的. NSDat ...
- bzoj千题计划245:bzoj1095: [ZJOI2007]Hide 捉迷藏
http://www.lydsy.com/JudgeOnline/problem.php?id=1095 查询最远点对,带修改 显然可以用动态点分治 对于每个点,维护两个堆 堆q1[x] 维护 点分树 ...
- 从PRISM开始学WPF(六)MVVM(三)事件聚合器EventAggregator?
从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...
- Node入门教程(1)目录
aicoder.com 全栈实习之简明 Node 入门文档 aicoder.com 线下实习: 不 8000 就业,不还实习费. 如果需要转载本文档,请联系老马,Q: 515154084 JS基础教程 ...
- Mybatis-select-返回值类型错误理解
Mybatis :Cause: java.lang.UnsupportedOperationException异常: 今天在写一个练手项目,作为初学Mybatis的小白,想着这里findByEmp_i ...
- python 模块部分补充知识
一.hashlib hashlib 模块主要用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. 实例 ...
- kubernetes进阶(02)kubernetes的node
一.Node概念 Node是Pod真正运行的主机,可以物理机,也可以是虚拟机. 为了管理Pod,每个Node节点上至少要运行container runtime(比如docker或者rkt). kube ...
- 使用 vi 命令
一.vi是什么 vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器. Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实 ...
- Python之协程
前言 在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位.按道理来说我们已经算是把cpu的利用率提高很多了.但是我们知道无论是创建多进程还是创建多线程来解决问题,都要消耗一定的时间来创建 ...
- spring data redis template GenericJackson2JsonRedisSerializer的使用
配置 <!-- redis template definition --> <bean id="myRedisTemplate" class="org. ...