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 式子长这样:

\[f(n,x)=\sum_{k=0}^{n−1} C^{k+1}_n \times f(k,x+1) \times f(n−k−1,x)\\+ \sum_{k=0}^{n−1} C^{k+1}_n \times f(k ,x−1) \times f(n−k−,x) \]

CF1942F

经典的围绕「数值快速减少」来展开的题目…

首先每次运算后就下取整显然是正确的。

照应开头,考虑「数值快速减少」的过程,发现经过 6 个数之后当前修改的地方就对后面就只有 \(<1\) 的影响了。

\(6\) 个数开一组,直接在上面套上线段树,组内暴力修改,组外信息简单合并,时间复杂度一个老哥。

CF1370F2

交互题…

首先把所有数都塞到里面去,这样可以得到一个存在于 \(s\to t\) 路径上的点。

以这个点为根,发现 \(s\)\(t\) 分别是不同子树内深度最深的两个点。

我们发现深度最深的那个点距离根的距离一定 \(>\frac {len}2\) ,我们以 \((\log_2len)-1\) 的代价直二分找这个点,然后找距离这个点 \(len\) 距离的所有点中在路径上的点即可,我们发现我们正好使用了 \((\log_2len)+1\) 次查询,恰好 \(\leq 11\)

posted @ 2026-01-15 17:00  Sgt_Dante  阅读(2)  评论(0)    收藏  举报