CF949E Binary Cards 题解

              题面

              首先发现:一个数最多会出现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]);
                  }
              }
              
              相关文章
              相关标签/搜索
              每日一句
                每一个你不满意的现在,都有一个你没有努力的曾经。
              公众号推荐
                 一个历史类的公众号,欢迎关注
              一两拨千金
              香港蓝月亮精选免费资料大全管家婆王中王鉄算盘开奖结果2019开奖记录结果查询香港马会开奖结果历史纪录在线查询 高州市| 抚顺市| 安宁市| 张掖市| 民县| 鹤壁市| 木兰县| 永吉县| 通城县| 牡丹江市| 渑池县| 平塘县| 府谷县| 三河市| 安远县| 交口县| 杭州市| 清新县| 南京市| 乌拉特后旗| 通榆县| 牟定县| 乌鲁木齐市| 巴林右旗| 麻城市| 广南县| 梨树县| 余庆县| 安丘市| 柯坪县| 浦县| 古蔺县| 祁门县| 道孚县| 宁河县| 镇原县| 巨野县| 甘洛县| 克拉玛依市| 万宁市| 临汾市| 无棣县| 闽侯县| 济源市| 法库县| 康马县| 资溪县| 香港| 八宿县| 平江县| 墨竹工卡县| 岳阳市| 武清区| 凤台县| 阳新县| 封开县| 东源县| 万安县| 高青县| 徐水县| 华容县| 湖州市| 杭锦后旗| 图们市| 嘉禾县| 察雅县| 中超| 藁城市| 三江| 龙泉市| 颍上县| 清河县| 巴楚县| 社旗县| 体育| 万山特区| 孟津县| 乡城县| 格尔木市| 江门市| 巍山| 怀集县| 剑阁县| 工布江达县| 平定县| 高碑店市| 贵港市| 沂水县| 高尔夫| 曲水县| 宁乡县| 徐水县| 阳西县| 牟定县| 潞城市| 乌兰浩特市| 凤山市| 桦南县| 峡江县| 福州市| 池州市| 张家川| 亳州市| 新民市| 平塘县| 赤城县| 平原县| 吴忠市| 南汇区| 钟山县| 教育| 莲花县| 郁南县| 博白县| 钟山县| 凭祥市| 兴安县| 晋州市| 临夏市| 灵山县| 康平县| 安宁市| 孟连| 万山特区| 北碚区| 额敏县| 深泽县| 霍城县| 裕民县| 大邑县| 新密市| 和龙市| 米泉市| 沙雅县| 修文县| 赤峰市| 绵竹市| 临汾市| 麻城市| 施秉县| 维西| 汶上县| 炎陵县| 新郑市| 土默特左旗| 舞阳县| 五常市| 乐都县| 大方县| 昌邑市| 桐庐县| 电白县| 巨鹿县| 安溪县| 比如县| 鄂托克旗| 翼城县| 古田县| 山东省| 安庆市| 马鞍山市| 炉霍县| 合山市| 竹山县| 长兴县| 廊坊市| 曲松县| 义乌市| 晋宁县| 明星| 白水县| 房山区| 霍林郭勒市| 洪江市| 临沧市| 贵港市| 柘城县| 龙南县| 宣城市| 镶黄旗| 会泽县| 临邑县| 留坝县| 靖江市| 南木林县| 乐都县| 松阳县| 郴州市| 河北省| 鹿泉市| 赤峰市| 定西市| 苍溪县| 荆门市| 无棣县| 连城县| 怀来县| 云龙县| 屏南县| 印江| 图木舒克市| 甘洛县| 连山| 鄯善县| 金坛市| 林口县| 苏尼特左旗| 莆田市| 临安市| 大田县| 隆尧县| 新化县| 牡丹江市| 芒康县| 台州市| 荣成市| 曲周县| 六安市| 信宜市| 宣武区| 军事| 金寨县| 昌黎县| 侯马市| 民和| 关岭| 依兰县| 辰溪县| 宿迁市| 湖北省| 余庆县| 安达市| 星子县| 邵东县| 万宁市| 大荔县| 镇康县| 福海县| 手游| 石首市| 太谷县| 措勤县| 修武县| 青冈县| 报价| 滦平县| 汨罗市| 大兴区| 敦化市| 潼南县| 吴堡县| 高碑店市| 金昌市| 江孜县| 桂东县| 临沧市| 武定县| 德安县| 兰坪| 藁城市| 曲松县| 石台县| 冕宁县| 兴隆县| 汪清县| 杭锦后旗| 林西县| 东山县| 铁力市| 九台市| 天祝| 吴堡县| 蒲江县| 兴国县| 新乐市| 桂平市| 大安市| 霍林郭勒市| 梅河口市| 色达县| 霸州市| 凤台县| 如皋市| 鄂托克前旗| 高州市| 古浪县| 通州区| 白河县| 安宁市| 奉节县| 北川| 招远市| 尚义县| 永胜县| 太仆寺旗| 石屏县| 鄂伦春自治旗| 仙桃市| 达孜县| 桦川县| 额济纳旗| 阿拉善左旗| 安达市| 秀山| 乐昌市| 石楼县| 华坪县| 江西省| 河北区| 延津县| 闻喜县| 绩溪县| 长宁县| 凤阳县| 天柱县| 尼勒克县| 恭城| 华坪县| 阿合奇县| 迭部县| 文山县| 平塘县| 惠安县| 兴国县| 滦平县| 临夏市| 崇仁县| 楚雄市| 突泉县| 清新县| 资阳市| 河北区| 剑阁县| 江门市| 富民县| 万山特区| 黄梅县| 鄂州市| 临沂市| 新田县| 全椒县| 侯马市| 贵州省| 伊春市| 罗甸县| 大石桥市| 东明县| 洪雅县| 海宁市| 米林县| 齐河县| 宣恩县| 柘城县| 广德县| 承德市| 搜索| 盈江县| 资兴市| 高淳县| 华阴市| 丰城市| 沙坪坝区| 石嘴山市| 育儿| 新平| 天柱县| 昭苏县| 丰都县| 射洪县| 云浮市| 赤壁市| 句容市| 怀来县| 乌苏市| 邵阳县| 苗栗县| 日照市| 南木林县| 云阳县| 玛沁县| 娱乐| 安多县| 海原县| 威宁| 浦县| 韶关市| 九江县| 凤台县| 广平县| 霍城县| 鹤山市| 巴林右旗| 麻城市| 达日县| 襄城县| 华宁县| 玛多县| 杭锦后旗| 兴安盟| 长汀县| 团风县| 天门市| 乐山市| 闽清县| 乾安县| 密云县| 曲麻莱县| 万源市| 新郑市| 镇宁| 信丰县| 伽师县| 山阴县| 建瓯市| 长顺县| 措美县| 华亭县| 黄大仙区| 鄂托克前旗| 衡山县| 高安市| 大同县| 南郑县| 钟祥市| 嘉鱼县| 泰州市| 景宁| 和龙市| 聂拉木县| 大丰市| 汝南县| 肇庆市| 温泉县| 宽甸| 达日县| 昌黎县| 贵州省| 南雄市| 社旗县| 泾川县| 昌邑市| 祁门县| 耿马| 普兰店市| 德昌县| 盘锦市| 襄城县| 腾冲县| 镇巴县| 包头市| 奉化市| 普陀区| 麻阳| 彩票| 白水县| 镇康县| 涟源市| 潞城市| 开阳县| 原平市| 平度市| 南涧| 台安县| 临颍县| 光山县| 渑池县| 泸西县| 呈贡县| 资源县| 应城市| 巴林左旗| 吉林省| 墨玉县| 丹江口市| 新巴尔虎右旗| 格尔木市| 东平县| 攀枝花市| 平定县| 许昌县| 大新县| 特克斯县| 深水埗区| 绿春县| 绥江县| 大新县| 乐陵市| 横峰县| 昌邑市| 青冈县| 岚皋县| 三亚市| 阜阳市| 雷州市| 天镇县| 荆门市| 昭苏县| 莲花县| 常宁市| 丹凤县| 嘉义县| 汉沽区| 津南区| 岚皋县| 潮安县| 双牌县| 东乡县| 阿荣旗| 图木舒克市| 德阳市| 富裕县| 绥阳县| 巴里| 阳曲县| 微山县| 揭阳市| 望谟县| 正安县| 从江县| 大英县| 施秉县| 九寨沟县| 德庆县| 滨州市| 安平县| 灵川县| 常熟市| 刚察县| 北辰区| 巴彦县| 延津县| 安化县| 体育| 安福县| 周口市| 南阳市| 芜湖县| 建瓯市| 桦川县| 永吉县| 秦皇岛市| 曲周县| 永靖县| 象州县| 敦化市| 微博| 仙居县| 东方市| 积石山| 六枝特区| 灵台县| 凉城县| 泽州县| 南和县| 哈尔滨市| 泰来县| 葵青区| 兴安县| 湘乡市| 通河县| 伽师县| 宾阳县| 固阳县| 吴川市| 凉城县| 汕尾市| 千阳县| 台东县| 信阳市| 临沂市| 龙川县| 汝州市| 泌阳县| 商河县| 恩平市| 仪陇县| 通山县| 丽水市| 红桥区| 淅川县| 宣化县| 新安县| 洛川县| 河曲县| 安平县| 栾川县| 龙门县| 镇远县| 衡东县| 龙州县| 阳东县| 吉水县| 新巴尔虎左旗| 广宗县| 台南市| 临澧县| 苏尼特右旗| 镇沅| 仙桃市| 青河县| 汝州市| 岑巩县| 河西区| 南江县| 北碚区| 丹寨县| 思茅市| 靖边县| 朝阳区| 航空| 会宁县| 工布江达县| 乌鲁木齐市| 秦皇岛市| 景谷| http://wap.jx1870fuelv.fun http://jx1870graduatev.fun http://jx1870getv.fun http://m.jx1870eyev.fun http://hz0j3r8vo.fun http://www.jx1870forwardv.fun http://jx1870juzpv.fun http://m.jx1870greyv.fun http://m.jx1870exactv.fun http://m.hz0j3r5vo.fun http://www.hz0j0r5vo.fun http://m.jx1870fruitv.fun http://wap.jx1870jazzv.fun http://wap.hz0j2r3vo.fun http://jx1870fanv.fun http://wap.jx1870figurev.fun http://wap.jx1870interestv.fun http://jx1870greyv.fun