题面

首先发现:一个数最多会出现1次;

然后深入推出:一个数不会既用它又用它的相反数;

这样就可以依次考虑每一位了:
如果所有的数都不含有这一位,那么就直接把所有的数除以2

如果含有,那么就减去这一位的数,再除以2;

2

当含有的时候搜索就可以了;

注意需通过去重来优化dfs,否则会TLE掉;

#include <bits/stdc++.h>
#define N 100010
using namespace std;
int a[N],b[21][N],ans[N],st[N],top=0;
int anss=INT_MAX;
void dfs(int dep,int n){
if(n<=1&&!b[dep][1]){
if(top<anss){
anss=top;
for(int i=1;i<=top;i++){
ans[i]=st[i];
}
}
return;
}
if(dep>20||top>=anss){
return;
}
bool flag=1;
for(int i=1;i<=n;i++){
if(b[dep][i]&1){
flag=0;
break;
}
}
if(flag){
for(register int i=1;i<=n;i++){
b[dep+1][i]=b[dep][i]/2;
}
n=unique(b[dep+1]+1,b[dep+1]+n+1)-b[dep+1]-1;
dfs(dep+1,n);
return;
}
else{
for(register int i=1;i<=n;i++){
if(b[dep][i]&1){
b[dep+1][i]=(b[dep][i]-1)/2;
}
else{
b[dep+1][i]=b[dep][i]/2;
}
}
st[++top]=1*(1<<dep);
register int tmp=unique(b[dep+1]+1,b[dep+1]+n+1)-b[dep+1]-1;
dfs(dep+1,tmp);
top--;
for(register int i=1;i<=n;i++){
if(b[dep][i]&1){
b[dep+1][i]=(b[dep][i]+1)/2;
}
else{
b[dep+1][i]=b[dep][i]/2;
}
}
st[++top]=-1*(1<<dep);
tmp=unique(b[dep+1]+1,b[dep+1]+n+1)-b[dep+1]-1;
dfs(dep+1,tmp);
top--;
}
}
int main()
{
register int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
n=unique(a+1,a+n+1)-a-1;
for(int i=1;i<=n;i++){
b[0][i]=a[i];
}
dfs(0,n);
printf("%d\n",anss);
for(int i=1;i<=anss;i++){
printf("%d ",ans[i]);
}
}

CF949E Binary Cards 题解的更多相关文章

  1. C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解

    剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...

  2. Codeforces 949E Binary Cards

    Description 给出一个长度为 \(n\) 的数组,求使得用最少数量的 \(2^k\) 或 \(-2^k\) 的数,使得数组中的每一个元素都可以被你选出的 \(2\) 的次幂表示 题面 Sol ...

  3. 【CF1436C】Binary Search 题解

    原题链接 题意简介 要求有多少种 n 的排列,能够通过二分法正确地找到放在 pos 处的数字 x. 答案对 1e9+7 取模.n<=1000. 采用的二分法如下图: 思路分析 首先,这个排列中有 ...

  4. Codeforces #698 (Div. 2) E. Nezzar and Binary String 题解

    中文题意: 给你两个长度为 \(n\) 的01串 \(s,f,\)有 \(q\) 次询问. 每次询问有区间 \([\ l,r\ ]\) ,如果 \([\ l,r\ ]\) 同时包含\(0\)和\(1\ ...

  5. CF908A New Year and Counting Cards 题解

    Content 有 \(n\) 张卡牌,每张卡牌上只会有大小写字母和 \(0\sim 9\) 的阿拉伯数字.有这样一个描述:"如果卡牌正面写有元音字母(\(\texttt{A,E,I,O,U ...

  6. CF701A Cards 题解

    Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),试在其中找到 \(\dfrac{n}{2}\) 对数,使得每个数对的元素的和都相等. 数据范围:\(2 ...

  7. Period of an Infinite Binary Expansion 题解

    Solution 简单写一下思考过程,比较水的数论题 第一个答案几乎已经是可以背下来的,在此不再赘述 考虑我们已经知道了\((p,q)\),其中\((p \perp q) \wedge (q \per ...

  8. C#版 - 226. Invert Binary Tree(剑指offer 面试题19) - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - 2 ...

  9. LeetCode编程训练 - 折半查找(Binary Search)

    Binary Search基础 应用于已排序的数据查找其中特定值,是折半查找最常的应用场景.相比线性查找(Linear Search),其时间复杂度减少到O(lgn).算法基本框架如下: //704. ...

随机推荐

  1. JavaWeb_(Hibernate框架)Hibernate配置文件hibernate.cfg.xml

    hibernate.cfg.xml配置文件——链接数据库 hibernate.cfg.xml一定要配置在/src文件目录下 --数据库驱动,url,用户名,密码 --方言org.hibernate.d ...

  2. 在SpringBoot程序中记录日志

    所有的项目都会有日志,日志文件是用于记录系统操作事件的记录文件或文件集合,可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统的活动等重要作用.这节描述如何用springboot记录 ...

  3. Docker进阶-快速扩容

    1.命令方式 在创建好的Swarm集群中运行nginx服务,并使用--replicas参数指定启动的副本数. docker service create --replicas 3 -p 80:80 - ...

  4. smarty逻辑运算符

    smarty逻辑运算符 eq        equal : 相等 neq       not equal:不等于 gt        greater than:大于 lt        less th ...

  5. AttributeError:module 'keras.engine.topology' has no attribute 'load_weights_from_hdf5_group_by_name

    在jupyter notebooks上运行tensorflow-keras的Mask R-CNN时遇到如下错误: 参考博客中写了两种解决方案: 解决方案一:报错是由于keras版本不对造成的.load ...

  6. 在Linux上部署Nginx,反向代理tornado的WebSite

    1.安装 Nginx yum install -y nginx 2. 修改nginx配置文件 cd /etc/nginx/ mv nginx.conf nginx.conf.swf mv nginx. ...

  7. jxbrowser 实现自定义右键菜单

    https://blog.csdn.net/shuaizai88/article/details/73743691 public static void main(String[] args) { J ...

  8. ubuntu下如何使得普通用户能够启动wireshark?

    一. 将dumpcap的用户组更改为wireshark sudo chgrp wireshark /usr/bin/dumpcap 二. 设置其他用户也具有与root一样的权限来执行dumpcap s ...

  9. 利用Calendar类判断是平年还是闰年

    package com.bgs.Math; import java.util.Calendar; import java.util.Scanner; /*###14.21_常见对象(如何获取任意年份是 ...

  10. liunx服务器在本地可以访问但是外网访问不了

    版权声明:本文为CSDN博主「tlytg456」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/tlytg/ar ...