ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF1684H

2022-05-21 11:04:04  阅读:145  来源: 互联网

标签:增加量 15 CF1684H dfs 划分 连续 rem


假设一共有 $c$ 个 $1$ ,$2^{d-1}<c \leq 2^d$ (先把 $c=0$ 判掉)。

然后划分方案很多种,连续 $x$ 个 $1$ 划分到同一段对最终总和的增加量大约是 $2^x$ 。

这个感觉就是很容易有解(因为划分的自由度极高)。

大概分析一下连续 $x$ 个 $1$ 内部划分能够得到什么结果。

$x>10$ 时一定能得到 $x$ 到 $2x$ 范围内的任何数,因为 $2^d<2c$ 我们自然猜想一定存在一种划分使得总和为 $2^d$ 。

但是 $x$ 很小的时候就非常麻烦,看起来要大分类讨论,况且中间的 $0$ 也不好处理,一不小心还会把复杂度写高了。

------------

但是啊,我们还有一种神奇的算法。我们在很久之前就学过它,但是现在用的越来越少,而且使用它会被当成无能的表现。

回忆一下几年前普及组训练的时候,自己最拿手的是什么?最常用的是什么?最喜欢的是什么???

每一位教练都会强调它的重要性,但是我们肯定都记不得了。

dfs+剪枝

没错,伟大的dfs往往能够避免各种分类讨论。

dfs(i,rem)

表示目前从第 $i$ 位开始,后面还需要 $rem$ 的总和。

如果序列第 $i$ 位是 $0$ 就跳过连续的 $0$ 到下一个 $1$ 。

其它情况:

因为连续 $x$ 个 $1$ 划分到同一段对最终总和的增加量大约是 $2^x$ 。

所以我们最多允许长度 $15$ 的划分。

直接枚举 $j=1->15$ 搜索,在判一下末尾。

但是这样会tle。

如果所需要的增加量(即 $2^d-c$ )非常大的话就会在最后一段几个位置一直搜,导致tle。

所以,当所需增加量大于20的时候倒过来搜( $j=15->1$ )。

最后再加个特判:前面一堆连续的 $0$ 最后连续 $5$ 个 $1$ 的情况。

这个凑不出 $8$ ,于是直接 $15+1$ 。

完了。

代码:

https://codeforces.com/contest/1684/submission/157757076

标签:增加量,15,CF1684H,dfs,划分,连续,rem
来源: https://www.cnblogs.com/csyakuoi/p/16294615.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有