CF/AT 泛做

*:不错的题。

CF1299C Water Balance *2100

注意到答案序列一定是单调递增的,证明:如果不是单调递增的则一定可以通过一次操作将字典序变小。

故,使用单调栈维护当前最靠右区间的权值,如果两个相邻区间合并后字典序会更小就将其合并,时间复杂度 \(O(n)\)Code

*CF1299E So Mean *3400

Anton 题。

观察一:对于 \(i\),询问除了 \(i\) 的所有数,答案为 \(1\) 当且仅当 \(i\)\(1\)\(n\)

观察二:推广观察一,若已知 \([1,k]\)\([n-k+1,n]\),对于 \(i\in[k+1,n-k]\),询问除了 \(i\) 与所有已知数的所有数,答案为 \(1\) 当且仅当 \(i\)\(k+1\)\(n-k\)

观察三:\(1\)\(n\) 可以任意确定。

因为 \(1\) 已经确定,那么只需要使用一次操作就可以确定 \(k+1\)\(n-k\) 的位置,因为这两个必定奇偶性不同。

依据这个做法就可以得到一个 \(O(n^2)\) 的做法。

观察四:依据中国剩余定理,知道 \(p_i\bmod 3,5,7,8\) 的值就可以得到 \(p_i\) 的值。

观察五:询问 \(k\) 个总和差为 \(1\) 的子集和某个不知道的数就可以得到这个数 \(\bmod k\) 的值。

所以,我们根据观察二询问到 \(k=5\),就可以求出 \(p_i\bmod 3,5,7,8\) 来得到 \(p_i\) 的值,可以通过,Code

CF1301E Nanosoft *2500

感觉有点拉?

我们将红色格子右下角的位置赋值上这个对应最大正方形的边长,对于每一次询问,显然具有可二分性,每次二分一个边长,问题被归约成一个矩形最大值问题,二维 ST 表即可,时间复杂度为 \(O(nm\log n\log m)-O(\log n)\)

当然可以使用前缀和直接暴力预处理加查询,时间复杂度 \(O(n^3)-O(n)\),也可以通过,Code

CF1301F Super Jaber *2600

如果 \(q=1\),则可以直接最短路,有很多组询问则考虑预处理。

预处理 \(f(k,i,j)\) 表示 \((i,j)\) 走到 \(k\) 这个颜色所需的步数?好像不错。

对于每组询问,直接求出 \(\min_k f(k,r_1,c_1)+f(k,r_2,c_2)+1\) 就可以求出带瞬移的路径,但是还有不带瞬移的,曼哈顿路径就可以涵盖这种情况。

BFS 预处理,时间复杂度 \(O(knm)-O(k)\)Code

CF1303E Erase Subsequences *2200

拉。

枚举 \(t\) 被割开的位置,那么,问题变成要从 \(s\) 中取出两个不相交的子序列。

直接 \(f_{i,j}\) 表示每个序列被匹配到的位置是经典 \(O(n^3)\),算起来是 \(O(n^4)\),但是 DP 只记 \(0/1\) 有点浪费,改成 \(f_{i,j}\) 表示用前 \(i\) 位匹配了 \(j\)\(s_1\),剩下的可以最多匹配出几个 \(s_2\),那么就是 \(O(n^3)\)Code

CF1303F Number of Components *2800

注意到直接操作将会很难处理断边,考虑分开处理加边和断边。

考虑逆序处理断边,那么此时断边变为加边,贡献取反,就可以维护整个矩阵的连通块个数了,Code

CF1303G Sum of Prefix Sums *2700

即求 \(\sum_{i=1}^n ia_i\) 的最大值。

涉及到路径统计,考虑枚举 LCA 或者点分治,如果要枚举 LCA 那么就得支持合并直线集和对一个直线集的 \(k\) 全部加上一个值,李超线段树做后面那个还是比较困难的,虽然也能做来着。

考虑点分治,同理维护直线集,这个时候只需要支持插入和查询,用李超树就很简单了,时间复杂度 \(O(n\log n)\),代码鸽了。

CF1304E 1-Trees and Queries *2000

先讨论简单路径的情况:注意到两个点如果只算简单路径最多就只有三种,容易用倍增处理出这三种的情况。

扩展到一般路径,有往返走的操作,每次给路径加 \(2\),那就只需要判一下奇偶性就行了,代码鸽了。

*CF1149D Abandoning Roads *3000

神题。

首先将 \(a\) 对应的边加入图,此时形成多个连通块,那么连通块内的答案就是两点之间最短路,可以证明这是一定能行的。

对于剩余的节点,注意到我们的答案等价于枚举任意一条简单路径,这些路径不能重复经过这若干个连通块的任意一个,容易状压做到 \(O(2^nnm)\)

但是当连通块大小 \(\le 3\) 的时候,这个连通块可以被重复经过且不会有影响,理由是 \(2b\ge 2a\),所以删去这些点即可做到 \(O(2^{n/4}nm)\)Code

posted @ 2023-06-27 16:36  时一月  阅读(30)  评论(0)    收藏  举报