CF2700做题记录
CF1720E
神秘结论题,结论是颜色数 \(\geq k\) 时答案 \(\leq 2\)…
如果颜色数 \(\leq k\) 那么直接一个一个染色就好了。
如果颜色数 \(\geq k\) ,我们规定第一个染色的正方形是从 \((1,1)\to(x,x)\) ,\(x\) 是保证颜色数 \(\geq k\) 的最大值,这个颜色我们先不规定。
然后我们再规定第二个染色的正方形是从 \((y,y)\to(x+1,x+1)\) ,\(y\) 是保证颜色数 \(\geq k\) 的最小值,这个颜色我们也不规定。
首先有个结论是:此时的颜色数和 \(k\) 的差值 \(\leq\) 2,显然我们的 \(y\) 再减少 \(1\) 最大减少两种颜色。
剩下的那个差值就随便确定染的颜色出没出现过就好了,我们现在证明了颜色数 \(\geq k\) 时答案 \(\leq 2\),可喜可贺可喜可贺。
而答案是0 or 1就随便做了。
CF1750F
没想到反着做被硬控一万年…
首先这个的信息只依靠它的长度,所以我们直接大力定义 \(f_i\) 表示长度为 \(i\) 的方案数。
我们发现直接做很困难,因为每一个填充成整块的操作方式很多,很容易算重,但是每一个非整块对应的最终状态是唯一对应的。
然后我们定义 \(g_i\) 表示长为 \(i\) 而且首尾都为1的连续段,再存一个结尾连续段长度就随便转移了,时间复杂度 \(n^2\)。
CF1774F2
神仙题啊,看见类似 \(\times 2\) 的条件就应该想到的…
不妨思考操作三的本质:对于先前插入的某个当前值为 \(x\) 的数,将其分裂为 \(x\) 与 \(x-w\)。其中 \(w\) 是如果执行一次当前操作三,期间所有二操作的和。这样转化的正确性是显然的。
考虑 \(w\) 如何更新,显然遇到二操作就加上对应的 \(x\),遇到三操作则翻倍即可。
进一步地,我们这样描述问题:对于某一个插入操作,我们考虑它后面的二三操作,遇到二操作则减去对应的 \(x\),遇到三操作则可以选择减去对应的 \(w\) 或不变,求最后有多少种可能的 \(x'>0\),再对所有插入操作求和。
注意到相邻两个三操作的 \(w_1,w_2\) 满足 \(2w_1 \leq w_2\)。故除开一段 \(w=0\) 的前缀,剩下的三操作只有 \(\log v\) 个是有意义的,因为后面的三操作你必须选择不变。
\(w=0\) 的三操作对插入的贡献即为 \(ans \gets 2ans\)。此时剩余部分转化为:有一个大小不超过 \(\log v\) 的集合 \(S\),且满足 \(\forall i>1,2S_i \leq S_{i-1}\),求它有多少子集和小于 \(x\)。从大到小,枚举当前元素选不选,选则继续递归,不选则剩下的数可以任意选择,直接计算即可。
CF1730F
有点巧妙…
\(p_{q_i}≤p_{q_j}+k\) 实际上可以转化为 \(p_{q_i}-p_{q_j}≤k\) 。
也就是说当前选的数和最大值的差 \(\leq k\) ,那么记录下一段前缀 \([1,x]\) 的选取方案中所有 \(>x\) 的数的情况就可以简单转移。
逆序对数直接算就行。
CF1789F
搞笑暴搜题,可惜我更搞笑…
出现次数 \(\leq 3\) 的循环节可以直接枚举断点算LCS。
出现次数 \(\geq 5\) 的循环节必定出现在把整个字符串分成 \(5\) 节的其中一节里。
出现次数 \(=4\) 的实际上出现次数 \(=2\)。
CF1601D
恐怖贪心题,拼尽全力无法战胜…
如果 \(\max(a_x,s_x)< \max(a_y,s_y)\)。
分情况讨论一下…
如果 \(a_x\leq s_y\) ,那么 \(x\) 一定在 \(y\) 前面,无论选不选 \(x\),\(y\) 都不受影响。
如果 \(a_x \leq a_y\) 且 \(s_y \leq a_x\),那么 \(x\) 一定在 \(y\) 前面,\(x\) 和 \(y\) 最多只能选一个,选择 \(x\) 之后山更矮,所以 \(x\) 在前面。
如果 \(a_x\geq a_y\) 且 \(a_x \geq s_y\) ,那么 \(\max(a_x,s_x)\geq \max(a_y,s_y)\) (雾)
如果 \(\max(a_x,s_x)= \max(a_y,s_y)\)。
再分讨一下。
\(a_x=\max(a_x,s_x)= \max(a_y,s_y)=s_y\) 时
\(x\) 在不在前面 \(y\) 都能选,\(y\) 在前面的时候 \(x\) 不一定能选。
此时如果后面有 \(s_z<a_x\) 则肯定有 \(a_z>a_x\) 选择 \(x\) 肯定比选择 \(k\) 更优。
\(s_x=\max(a_x,s_x)= \max(a_y,s_y)=s_y\) 和 \(a_x=\max(a_x,s_x)= \max(a_y,s_y)=a_y\) 无所谓,都选一个和都选两个的区别。
\(s_x=\max(a_x,s_x)= \max(a_y,s_y)=a_y\) 是第一中情况的反转。
于是到这里直接按这个结论排序就好了。
CF1634F
简单题,直接切了……
我们规定对于序列 \(f_i\) 的生成序列 \(g_i\) 满足 \(g_i=f_i+g_{i-1}+g_{i-1}\) 。
那么 \([l,r]\) 区间加斐波那契就是在序列 \(f_l\) 上 \(+1\) 然后在 \(f_{r+1}\) 上 \(-F_{r-l+2}\) 以及在 \(f_{r+2}\) 上 \(-F_{r-l+2}\) ,\(f_i\) 的变化量是 \(O(1)\) 的,可以直接维护。
CF1270G
喵喵题,这个转换咋想到的…
由于 \(i−n≤a_i≤i−1\),所以 \(1≤i−a_i≤n\)。
建立一张 \(n\) 个点的有向图,对于每个点 \(i\),连边 $ i→i−a_i$ 。
这张图中每个点的出度都为 1,因此这张图是一个基环内向森林。
可以发现对于任意一个环,环上的点对应的下标就是我们要找的答案。
CF1841F
/tuu……
化简一下得到 \((x-y)^2+(z-w)^2\) ,把向量极角排序加起来形成一个凸包,最大值一定在凸包上。
CF1856E2
bitset来了……
首先贪心的想是要做到尽量均分,然后我们发现如果一个重儿子的大小 \(\times 2\) 比整颗子树还要大时那么肯定是重儿子一边其他儿子另一边。
然后很典的是不同的儿子大小只有 \(\sqrt{\text{siz}_u}\) 种,单调队列优化一下。前面重儿子多个小老哥+bitset减个大老哥就过了。
CF1930F
为啥我不会套路题…
首先看答案的第 \(i\) 位如果是 1。
那么说明 \(\max(a_i|x)\) 中有这个1,而且 \(\min(a_i|x)\) 中没有这个1。
所以最大的答案就是 \(\max(a_i~\text{AND}~¬a_j)\)。
得到这个就随便做了。
CF1918G
构造题…
偶数: -1 1 -1 -2 2 1 循环。
奇数:-3 1 2 1 -1 后面接 -3 -2 2 -1 1 3 循环。
CF1924D
反射容斥板子,这能有2700?
CF2043F
luogu 上评蓝的 2700 …
注意到值域非常小,直接开个桶记前缀和求出区间每个数的个数。
然后直接 \(O(A^2)\) 随便转移就行了。
CF1572C
不知道难在哪…
颜色只有20种,直接区间DP枚举断点即可。
CF1781F
real 2700…
考虑我们不管插入的第一对括号,一种想法是考虑第一对配对括号,但是这并不好,因为括号序列不一定合法,所以找插入时第一个括号的另一半。
然后我们发现,这样我们仅仅把序列分成了两个部分。于是乎,我们在不修改定义的情况下,直接得到了 \(O(n^3)\) 的做法,注意这个做法钦定的是一个插入时间不固定的括号,所以你要给它也分配一个插入时间,注意它的插入时间一定早于它包含的所有括号。
这个的 DP 式子长这样:
CF1942F
经典的围绕「数值快速减少」来展开的题目…
首先每次运算后就下取整显然是正确的。
照应开头,考虑「数值快速减少」的过程,发现经过 6 个数之后当前修改的地方就对后面就只有 \(<1\) 的影响了。
每 \(6\) 个数开一组,直接在上面套上线段树,组内暴力修改,组外信息简单合并,时间复杂度一个老哥。
CF1370F2
交互题…
首先把所有数都塞到里面去,这样可以得到一个存在于 \(s\to t\) 路径上的点。
以这个点为根,发现 \(s\) 和 \(t\) 分别是不同子树内深度最深的两个点。
我们发现深度最深的那个点距离根的距离一定 \(>\frac {len}2\) ,我们以 \((\log_2len)-1\) 的代价直二分找这个点,然后找距离这个点 \(len\) 距离的所有点中在路径上的点即可,我们发现我们正好使用了 \((\log_2len)+1\) 次查询,恰好 \(\leq 11\)。

浙公网安备 33010602011771号