题目链接:

B - Binary Tree

 HDU - 5573

题目大意:

给定一颗二叉树,根结点权值为1,左孩子权值是父节点的两倍,右孩子是两倍+1;

给定 n 和 k,让你找一条从根结点走到第k层的路径,每经过一个结点,必须加上或者减去其权值,最后得到的结果是n;

具体思路:因为每个点都需要用到,所以我们先假设所有的点都需要用到,这个时候就全部是"+"号,然后通过二进制的性质,能够凑齐范围内的所有数,然后我们算一下差值还有多少,然后再减去这个差值就好了。

AC代码:

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = ;
ll a[maxn],sum[maxn];
ll ans[maxn];
int vis[maxn];
void init()
{
a[]=1ll;
sum[]=a[];
for(int i=; i<=; i++)
{
a[i]=a[i-]*2ll;
sum[i]=sum[i-]+a[i];
}
}
int main()
{
int T,Case=,tt;
init();
scanf("%d",&T);
while(T--)
{
ll n,k;
scanf("%lld %lld",&n,&k);
printf("Case #%d:\n",++Case);
ll tmp=sum[k]-n;
if(tmp&)
tmp=(tmp+)>>,ans[k]=a[k]+;
else
tmp>>=,ans[k]=a[k];
vis[k]=;
for(int i=k-; i>=; i--)
{
ans[i]=a[i];
if(tmp>=a[i])
{
tmp-=a[i];
vis[i]=;
}
else
vis[i]=;
}
for(int i=; i<=k; i++)
{
printf("%lld %c\n",ans[i],vis[i]==? '-' : '+' );
}
}
return ;
}

最新文章

  1. WPF学习笔记1---初接触
  2. 两个实用的工具推荐:ResxManager和ValueInjecter
  3. MongoVUE(MongoDB图像管理工具)
  4. 如何生成RestFul Api文档
  5. poj 1182 食物链 (并查集)
  6. Myeclipse中相同变量高亮显示
  7. JS调试必备的5个debug技巧
  8. Jackson将json字符串转换成List&lt;JavaBean&gt;
  9. mysql 查询每个分组前N条记录
  10. mongo db 使用方法
  11. CSS 之 光进入光
  12. Android 动画的分类
  13. How to trace the Geolocation of network traffic
  14. R语言-离职率分析
  15. 【SDOI2014】向量集
  16. .Net外包篇:我是怎么看待外包的(二)
  17. python实用脚本集
  18. usbserials
  19. Eclipse下SpringBoot没有自动加载application.properties文件
  20. IIS发布网站遇到 编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary 编

热门文章

  1. 【译】4. Java反射——字段
  2. session/cookie/token
  3. TODO java疑问
  4. plsql界面/command界面
  5. window下域名解析系统DNS诊断命令nslookup详解
  6. ubuntu下cmake编译opencv 3.4.3源码;
  7. mysql执行update报错 Err] 1055 - &#39;information_schema.PROFILING.SEQ&#39; isn&#39;t in GROUP BY
  8. docker 基础之镜像加速
  9. 【XShell】xshell评估过期解决办法
  10. 面向对象【day08】:异常处理(六)