HDU5573-二进制思想-构造
来源:互联网 发布:淘宝天猫培训 编辑:程序博客网 时间:2024/05/16 12:00
https://vjudge.net/contest/167609#problem/B
没有想到二进制,以为是在树上dp。。。所以也不知道怎么dp。。
首先可以确定的是 满二叉树 最左面的可以表示所有的值。
但是题目要求 不是加就是减,所以一个减号相当于两倍的减(每一项相加得到结果,这个数变为负的)
就是算出 (1<
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>/*首先可以确定的是,最左边的一排数是可以表示任意数的,然后还发现,那个要表示的数的和 规范表示的差值 的一半 就是要减去的地方自己画一下图就知道了*/using namespace std;typedef long long ll;const int maxn=2000;ll a[maxn];void init(){ for(int i=0;i<=61;i++){ a[i]=1ll<<(i); }}int main(){ int t; ll m ,n; //init(); //cout<<a[0]<<"!!"<<a[1]<<endl; scanf("%d",&t); for(int cas=1;cas<=t;cas++){ //memset(vis,true,sizeof(vis)); scanf("%lld%lld",&m,&n); printf("Case #%d:\n",cas); ll ans=(1ll<<n)-1; if((ans-m)&1) ans=ans-m+1; else ans=ans-m; ans/=2; for(int i=0;i<n-1;i++){ if(1ll<<i&ans) printf("%lld -\n",1ll<<i); else printf("%lld +\n",1ll<<i); } if(!(m&1)) printf("%lld +\n",(1ll<<n-1)+1); else printf("%lld +\n",(1ll<<n-1)); } return 0;}
阅读全文
0 0
- HDU5573-二进制思想-构造
- 【HDU5573 2015上海赛区B】【构造 二进制思想】Binary Tree 二叉树上走m层加减数使得最后权值恰为n
- hdu5573 Binary Tree 二进制
- HDU5573 Binary Tree(构造)
- hdu5573 Binary Tree (构造)
- 二进制思想及其应用
- 构造二进制树
- HDU5573 Binary Tree
- HDU5573 Binary Tree
- hdu5573 binary tree
- POJ-1906(二进制思想)
- HDU2191 多重背包(二进制思想)
- 多重背包二进制分解思想
- java编程思想----构造器
- 多重背包的二进制分解思想
- 多重背包问题的二进制分解思想
- 多重背包的二进制分解思想
- POJ1276多重背包二进制思想优化
- Java 利用Map写个简单的缓存
- oracle——服务器同时安装服务端和客户端冲突
- 1142: 二进制数的大小
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- bzoj 4269 再见Xor
- HDU5573-二进制思想-构造
- C语言编程-----程序的内存布局
- caffe的concat层
- Markdown的使用
- 线性判别分析LDA的多个python实现
- Java基础教程32-递归
- CString转换成string
- [15] DevOps 自动化运维工具Chef----chef-apply, chef-client,chef-zero,chef-solo区别
- 朴素贝叶斯学习总结