『网赛总结』Day11

暑假以来?包括补题和 VP。

CF


1. CF1982

C

dp + 数据结构优化 / 贪心。

D

转化成解方程。裴蜀定理。

E

分治。每次简化 1/2。

\(f(n, k) = f(m, k) + f(n - m, k - 1), m = 2^x, m < n, m(Max)\)。然后再算一算中间的数量即可。

F

维护序列 \(a_i>a_{i+1}\)。找到不满足条件的最大区间 \([l,r]\),显然要答案区间包含它并且使得值域连续,这里根据最大值最小值 ds 上二分即可(因为前后都是递增的)。


2. CF1989

B

LCS 变形。

C

二分后简单贪心。

D

递归实现被 hack 了。

先一次操作使得 \(c_i\)\(10^6\) 范围内,考虑 dp。

不妨按照限制从小到大 dp,每次转移不能暴力,由于前面所有状态可以转移,并且都是 +1,故 dp 数组单调,维护 \(a-b\) 的最大值作为 \(V_{now}\) 即可。

E

有个 dp 用第 \(k+1\) 维表示大于 \(k\) 的维的总答案的 trick。

本质上我们只关心相同数构成的块的状态。至少出现 \(k\) 个数说明段数大于等于 \(k\)

前缀和优化 dp。注意特殊情况:不在开头或者结尾的长为 \(2\) 的段。因为还原在 \(b\) 里面是 2 个 1。会和分成 2 个 1 的段重复计算。


3. CF1983

B

  1. 对每个 \(2\times 2\) 的矩阵操作,易证成立。

  2. 结论:每行每列关于 \(3\) 同余。

C

可以暴力确定前面和后面的分界点,判断中间是否成立即可。

D

不妨 \(r=l+1\),发现所有 \(r>l\) 的情况都可以分解成多个 \(r=l+1\) 的操作。

考虑直接排序,一个数组排完过后一直 1 2 跳即可。发现只要奇偶性不变就可以。

又知这样子排序的交换次数是逆序对个数,bit 计算。

E

每个普通球的是贡献相似的。(所以实际上可以权值累加)

组合意义:普通球放一排,两人交替选择,中间可以插入特殊球,这些球的主人和后面的普通球一样。首尾可插,并且可重复插。

注意 Alice 选的都是奇数位的球,可以算出普通球和特殊球的位置占比,得出期望。

F

不难想到二分答案然后对满足条件的计数。(trie 上可以实现计算小于等于一个数的信息)

扫描 \(r\),trie 上每个节点维护最后一次到达的下标 \(lst_x\),就是所有满足小于等于二分值的 \(lst_x\) 的最大值。(在这个点前面一定能取到最小值)

不要忘记保留历史版本的 \(lst\) 最大值。


4. CF1988

C

长度就是 \(n\) 的二进制 1 个数加 1,因为每个位置都可以不选一次。这是基于限定选择位置和 \(a_i\) 单增的贪心。

D

对所有人被染色时间 dp 即可。证明这个染色时间是 log 级别。

复杂度就是一个 mex 计算,\(f(i)\) 表示颜色 \(i\)\(minsiz\),有 \(f(i) = 1 + \sum (j<i) f(j)\)

\(f(1) = 1, f(i) = 2^{i-1}\)


5. CF1994

C

二分确定 dp 转移点,像一道 arcb。

D

鸽巢定理证明一定有解。

具体的,反着操作。你的同余系必定有 \(x+1\) 个,而你要找到和 \(x\) 同余的。

实现也简单,能加就加,平方对数。

E

按位贪心。

首先如果一个位超过 2 个,那么另一个一定可以把后面全部变成 1,直接跳出。

上面这个性质很强,说明跳出之前,前面的都只有 1 次。

每次都贪心留下这一位的答案即可,发现这是下界,考虑上界,由于唯一,如果要前面一位来调整的话就会丢弃那一位的 1,不优。

F

欧拉回路。

考虑预处理,让部分边变得重要,同时保证一定有解(度数是偶数,这可以通过 dfs 实现)。

最后就可以跑欧拉回路了。


6. CF1990

C

2 次过后数组就单增了,很好观察出来。

然后整个数组的变化就是向右平移,所以每个连续段的贡献是一个分段函数。

D

贪心。舍弃掉 >4 的行。算相邻两个段之间可不可以减少答案。


7. CF1995

B2

先判掉 \(s\) 相等的情况。

否则,考虑先选择 \(s\),然后继续选 \(s+1\)。最后,看能否用 \(s+1\) 换掉一些 \(s\)

C

贪心,保存指数进行 log 运算。

D

转化:每 k 个位置必须有一个 1。

\(S\) 是你选的最终颜色状态。

\(S\) 和每个 \(P\) 有交,\(P\) 是每个 \(k\) 段的 \(c_i\) 集合。

将 P 取反,可以得到等价条件:所有 \(i\)\(S\) 不包含于 \(P_i\)

理解就是取反之后,原来 P 是 1 的直接变成 0 了,只要 S 有 1 就行了。

可以做 bool 的高维后缀和。


8. CF1993 (VP)

C

循环节显然是 \(2k\),所以对于每个灯你可以知道它在模意义下的 \(l,r\),我们需要求最小的 \(s\),使得 \(s\bmod 2k\) 被所有 \([l,r]\) 区间包含。并且 \(s\ge maxn\)

第一个限制直接做数组差分即可。第二个好算。

D

二分 + dp

平方 dp 是显然的,需要根据题目性质优化到线性。

性质:所有转移位置在 \(k\) 的同余系下不等且递增。

考虑每次转移是从 \(i-1\) 或者 \(i-k\) 转移而来,\(i-k\) 的意思是舍弃一段,\(i-1\) 是接上上一个。

如果 \(i\bmod k = 1\)则一定不能在前面一段的基础上接上 \(a_i\)。根据性质得证。

其它情况就可以从 \(i-1\)\(i-k\) 转移过来了。

F

有个 trick 是一次调头相当于接着走,将长宽扩大一倍,每次行走赋予模意义这样就成功地去除了调头的限制。

设走 \(j\) 步后到达 \(x_j,y_j\),到达 \((0,0)\) 等价于 \(x_j\)\(2w\) 同余,……。

考虑 \(k\),设 \(X=x_n,Y=y_n\),有方程:

\[X\times i + x_j \equiv 0 \pmod {2h} \]

\[Y\times i + Y_j \equiv 0 \pmod {2w} \]

可以转化成两个 \(i\equiv a \pmod b\) 的形式。

excrt 合并一次即可,得出最小非负整数解,然后根据解的范围算出答案。


9. CF1998

B

我们的构造要向“每个区间只有 1 个数不一样考虑”。

C

比较难。但是出的好。

注意到如果我们不删除中位数这个位置的数,那么那个数是一定的。

所以我们可以把 \(k\) 加到最大的可以加的数上,统计答案就在这个数,然后二分算中位数即可。

其它策略?我们可不可以使得中位数变大一点?

此时我们就询问 \(a_n\),然后通过操作来使得中位数最大即可。

操作也是很好想的,如果对 \(a\) 排序然后每次二分实现的话复杂度就是 \(O(n\log V)\) 的。

D

如果你提前求出从 1 到达每个点的最少时间,你发现不好做,因为你要限制的区间是有约束的。

换句话说,假设 A 从 \(s\) 开始走到 \(t\),你知道 \(dp_t\),但是 \(dp_t\) 可能由 \([s,t)\) 的数转移过来,就没办法了。

解决方法也很好想,顺序扫描,每次统计从 \(i\) 出发的边所造成的贡献。对于边 \(i\to to\),此时只考虑了 \([1,i)\) 的边,所以对于 \([i+1,to)\) 的点,这时的 dp 值完全是不限制的、正确的;所以我们计算一下影响区间就好了,打一个数组差分。

E

笛卡尔树。直接区间上做也可以。

建出树来,发现如果 \(sum_l\) 大于 \(a_x\) 的话,那么 \(l\) 就一定可以替代 \(x\)\(r\) 同理。

但是有一个前提,就是到祖先的路径上的点都是可以的。

所以两次 dfs 即可。

严谨的证明你考虑每次操作是 upd 和删除,那此时 \(x\)\(l,r\) 所表示的数在 \(S\) 里面就一定是相邻的。

其实我交上去发现过了也觉得很不可思议。

E2 还不会。

加强版:[JOISC2022] 鱼 2。

在笛卡尔树的角度想是没有前途的,看能不能转化成区间的性质。

\(pre_r-pre_{l-1} \le \min(a_{l-1},a_{r+1})\),则 \([l,r]\) 内的所有数都不满足条件。

估计不会补了。


10. CF2004

我快出生了。

D

如果 \(l\)\(r\) 有重合,那么就直接 \(|i-j|\)

否则,对于一个不完全同于 \(l\) 的位置,它一定部分重合于 \(r\)

所以你直接枚举在 \(l\) 左边,区间内,\(r\) 右边的情况即可。

E

Nim + sg

对每个 \(a_i\) 算 sg 函数,判断所有 sg 异或是否是 0。

打表找结论,但我不会证。

结论:

  • \(a\) 是质数,则 \(sg(a)\)\(a\) 的质数编号。

  • 否则,\(sg(a)\)\(a\) 的最小质因子的 \(sg\) 值。

线性筛即可。要特判 1 和 2。

F

需要观察到分裂操作一定不优,这里有各种情况,但是你都是可以直接合并做的。

考虑区间 dp,\([l,r]\)\([l',r']\) 能够转移过来,可以推出限制:\(s_r+s_{l-1}=s_{r'}+s_{l'-1}\)

这告诉我们同一个和下,区间都是包含关系,显然可以转移。

那么我们就可以按照 \(s\) 和来进行分组 dp 了,转移的代价就是,有一个 \(s\) 出现就可以减少 2 的代价。

注意最后 \([],[]\) 的情况,舍去即可。


11. CF2001

C

对于每个点暴力询问 \((1,i)\)。一定会返回路径中间的点,并且题目自动帮你二分了,所以复杂度是对的。

D

看来这种古怪的定义多半都只能是暴力+优化。

暴力选择最小字典序,奇数选最大,偶数最小。

一个数能选择必须它的位置后面出现了所有还没有选的数,这个直接记录 \(nxt\) 数组,丢进 set 里面,我们就可以知道这一次选择区间的 \(r\)

考虑 \(l\)?就是上一个位置 +1。现在限制都没了,就是区间里面查最值,ds 即可。

注意还有每个数只选一次的限制,所以每次把这个数的位置都在 ds 上给删除。


posted @ 2024-08-21 09:32  LCat90  阅读(18)  评论(0编辑  收藏  举报