博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5573 Binary Tree(找规律)
阅读量:6413 次
发布时间:2019-06-23

本文共 1278 字,大约阅读时间需要 4 分钟。

题目链接:

题意:给你一个完全二叉树,节点为自然数的排列(第一行1,第二行2 3,第三行4 5 6 7。。。)。现在,给你一个N和K,K表示给你这个完全二叉树的前K行,从第1行到第K行有很多路径,希望找到一条路径能表示N,路径上的节点可取正也可取负,要求最后的和为N。

思路:由题目给的数据范围可知前两个节点有一个一定可以表示N。(前两个节点可以表示1 - 2^k)

code:

1 #include 
2 #include
3 using namespace std; 4 const int MAXN = 65; 5 typedef long long LL; 6 7 struct node 8 { 9 LL value;10 char ch;11 };12 node rec[MAXN];13 void solve(LL p, LL N)14 {15 int L = 1;16 while (true) {17 if (N < 0) {18 rec[L].value = p;19 rec[L++].ch = '-';20 N += p;21 p >>= 1;22 } 23 else if (N > 0) {24 rec[L].value = p;25 rec[L++].ch = '+';26 N -= p;27 p >>= 1;28 }29 else return;30 }31 }32 33 int main() 34 {35 int T;36 scanf("%d", &T);37 for (int cas = 1; cas <= T; ++cas) {38 LL N;39 int K;40 scanf("%lld %d", &N, &K);41 LL p = (LL)pow(2L, K - 1) + 1;42 if (N & 1) --p;43 solve(p, N);44 printf("Case #%d:\n", cas);45 for (int i = K; i >= 1; --i) {46 printf("%lld %c\n", rec[i].value, rec[i].ch);47 }48 }49 return 0;50 }

转载于:https://www.cnblogs.com/ykzou/p/5012195.html

你可能感兴趣的文章
关于监控工具的主动发起性能测试
查看>>
我的友情链接
查看>>
OpenSSL学习(十六):基础-指令rand
查看>>
KeyMob致力于打造国内领先的移动广告平台
查看>>
路由选路原则
查看>>
jvm 学习(一)
查看>>
JavaScript简介
查看>>
SQL Server附加数据库拒绝访问解决方法汇总
查看>>
SM2算法原理及实现
查看>>
RHCA教材翻译计划
查看>>
js-小括号在不同场合下的作用
查看>>
我的友情链接
查看>>
kvm中虚拟机的硬盘扩容
查看>>
Android (Launch Mode) 四种启动模式
查看>>
透视学理论(二)
查看>>
Dubbo/HSF在Service Mesh下的思考和方案
查看>>
Django form表单
查看>>
CTYL-9.14(tomcat端口与阿里云安全组,域名与tomcat配置,域名与反向代理)
查看>>
Java 多线程相关问题记录
查看>>
LNMP架构介绍、MySQL安装、PHP安装、 Nginx介绍
查看>>