山东二轮省集题解合集

山东二轮省集题解合集

Day1

A

打表,发现答案是 \(\prod\limits_{i=1}^n (2i-1)\)

证明可以考虑拿 GF 推。

首先有 dp,\(f(i,j)\) 表示到第 \(i\) 个括号当前左括号减右括号的个数为 \(j\),转移是简单的 \(f(i,j)=f(i,j+1)+f(i,j-1)\times (j-1)\)\(f(i,j)\) 写成一个形式幂级数的形式,那么有 \(F_i=\sum\limits_{j=0}^n c_jx^j\)。第 \(j\) 项对应 \(f(i,j)\)。那么我们的转移可以对应写成 \(F_i=xF_{i-1}+F_{i-1}'\)

两边同时乘上一个 \(e^{-\frac{x^2}{2}}\),换元得到 \(G_i=G_{i-1}'\)。起始项为 \(G_0=e^{\frac{-x^2}{2}}\),那么导 \(2n\) 次出来的就是 \((2n-1)!!\)

B

线性代数在 oi 中没有用。

C

首先把询问的贡献拆开,每一条链的答案实际上是距 \(x\) 不超过 \(k\) 的点数再加上下面那一段距离 \(son_x\rightarrow y\) 每一个点距离为 \(k\) 的答案。

那么就变成了两个问题,一个一个考虑。

对于第一个问题,考虑容斥。改为统计距离 \(x\)\(k\) 的点的子树 \(siz\) 的和,最后拿 \(x\) 的子树大小减去。这样能归约到第二个问题里面去。

对于第二个问题,考虑把每一条链重剖,那么我们要统计的本质上是到链顶的所有轻儿子内到链顶距离不超过 \(k\) 的点的个数,和下面那一段里面距离为 \(k\) 的点的个数。那么我们也把这两种问题分开做。

我们对于每一条重链,预处理出来距离为 \(k\) 的点数的和。这个直接枚举每一条重链,加入其所有轻儿子预处理即可。由于所有轻子树的大小和是 \(O(n\log n)\) 的,所以这部分复杂度 \(O(n\log n)\)

然后长链剖分(本质是 dsu on tree),处理出来每一个深度在每一个点有多少个。做一个从根到该点的前缀和,那么第二部分的答案就了,这部分复杂度是 dsu 的复杂度,也是 \(O(n\log n)\) 的。

综上,复杂度 \(O(n\log n)\)

Day 2

A

直接两边开根,有 \(x\equiv a^{\frac{1}{k}}\pmod p\),然后上费马小定理,有 \(x\equiv a^{k^{\varphi(p)-1}}\pmod p\),那么对后面这部分上扩欧求 \(k\) 在模 \(\varphi(p)\) 意义下的逆元即可。注意特殊处理 \(p=2\) 的情况(\(p=2\) 时,定义 \(0^0=0\) 也可)。

B

首先有个唐氏的 \(O(\frac{n^3}{w})\) 的做法,直接拿 bitset 上去搞。

然后开始四毛子,将序列每 \(B\) 个分成一块,处理出来对于每一个块包含它的有哪些,丢到一个 bitset 里,然后答案就是把每个串的 \(\frac{n}{B}\) 个 bitset 与起来。

考虑怎么处理每一个块包含他的有哪些。把每一个块当成一个二进制数,那么我们要处理的就是每一个二进制数对应的答案。首先处理出 \(2^k,k\in[0,B-1]\) 对应的答案,然后每个数 \(x\)\(x-\text{lowbit}(x)\) 转移,设 \(x\) 的对应的 bitset 为 \(f(x)\),则有 \(f(x)=f(x-\text{lowbit}(x))\land f(\text{lowbit}(x))\)

C

不会。

Day 3

A

开始找规律,首先发现 \(f(n,1)=f(n-1,1)+(-1)^n\frac{1}{n!}\),接下来发现 \(f(n,k)=f(n-1,k)+(-1)^n(1-f(k,k))\frac{1}{n!}\)。而一个性质是 \(f(n,1)=f(n,n)\),因此我们线性预处理 \(f(n,1)\),然后大力求解后面的式子即可。

考虑一个看起来比较正确的做法,令 \(f(n,k)\) 表示答案,\(g(i)=1-f(i,1)\),表示最左边的不被涂黑的概率,那么有 \(f(n,k)=1-g(k)g(n-k-1)\),意味着从 \(k\) 断开,然后递归到两边处理。那么我们用上述方法预处理 \(g\) 即可。

B

网络流。考虑到最小化孤立点数本质上是最小化流量为 \(0\) 的点数,那么把每个点向对应的源汇连两条边,费用分别为 \(-\infty\)\(1\) ,那么这样就会先增广 \(-\infty\) 的边,即让每个点都尽可能有流量。如果剩下一条边被经过,则意味着出现了一个大小为 \(3\) 的连通块,为了最小化,故将其费用设为 \(1\) 即可。

直接费用流会超时,但由于增广路长度只可能为 \(-2\infty\)\(-\infty+1\)(这样可能有点怪),因此多路增广即可做到根号复杂度。

C

计算几何在 oi 中没有用。

Day 4

A

首先根据 Prim 算法我们知道可以把一个长度不小于三且每个点都没有出边的连续段缩起来。这样原图的点就变成了 \(O(m)\) 个连续段和单点。接下来我们使用 Boruvka 算法来算最小的边。考虑每轮暴力扫描每个段拉出来最小的边贡献到连通块上,现在问题转化为咋求最小的边。注意到暴力找每个点的前驱复杂度其实是 \(O(D+V)\) 量级的,其中 \(D\) 为特殊边条数,\(V\) 连通块内点的个数。注意到 \(\sum D=m\),故我们预处理不在该连通块内第一个点,大体上就是维护个连续段。

B

首先判掉一些显然的无解:最终不是个树或初始连通的点最后不连通。

接下来考虑合并的问题。由于最后某个时刻 \(i\) 要成为 \(j\) 的儿子,因此我们最后一定要执行一次 find(i) 来把 \(i\) 直接拉到 \(j\) 上。因此我们不妨先在合并前就把所有要向外合并的点拉到根节点或其儿子,这样对 merge 操作就不会有影响。接下来若 \(x\) 有一个点要合并到 \(y\) 上就把 \(x\)\(y\) 连边,意味着 \(x\) 必然要在 \(y\) 合并前合并上去,否则执行一次 find(i) 就会拉到另一个根上。此时一个无解是该图成环。跑出一组根的拓扑序并按照上述方法做即可。最后检查是否有 \(f=g\)

C

非常好结论题。

\(S\) 为局面中本质不同花色的数量。

  • Lemma 1. 若 \(S<n\) 则有解。

    考虑鸽巢原理。在消去后,我们要么有一个空栈,要么有栈顶颜色相同。若不符合条件且有空栈,将一个不符合栈顶丢进去,继续消去即可。

  • Lemma 2. 若 \(S>n\) 则无解。

    注意到每种花色最大的牌不可能被消去,所以最后必然有超过 \(n\) 张牌。鸽巢原理可知此时一定不能赢。

  • Lemma 3. 对于某一花色 \(s\),若其在某一回合中出现在栈顶,则其以后一直都会出现在栈顶。

    考虑到消去操作是把两张消去一张,那么对于该花色一定有一张仍留在栈顶。

  • Lemma 4. 若某一时刻所有花色均存在,则不会有后继局面存在。

    证明显然。

  • Lemma 5. 若任意时刻能删除,则删除一定不劣。

    结合 Lemma 3,考虑到有影响当且仅当出现删除后不能删除的情况,但 Lemma 3 告诉我们该情况不会出现。

  • Lemma 6. 对于每种颜色,如果其初始时这种颜色的最大值位于某个栈的栈底, 则我们建立一个顶点。 如果某种颜色只有一张牌,则称其为这种颜色的顶点为源点。如果某种花色的牌的最大值所在的栈中存在另一种花色的最大值,则称这种颜色的顶点为汇点。我们从顶点 \(x\) 向顶点 \(y\) 连一条边,当且仅当 \(x\) 所代表花色的次大值位于 \(y\) 代表花色的最大值所在的栈中。则游戏可胜,当且仅当,存在一条从源点到汇点的路径。

    不会证明/cf。

    大体看了一下大概是根据一些小情况进行构造,然后对应的归纳证明。然后证明了这个条件是充要的。

那么我们根据 Lemma 6 建图 bfs 即可。

Day 5

A

首先注意到拆墙不会让答案变大,同时答案也不会比曼哈顿距离更小。根据过河卒的经典结论,从一个点在网格图上走奇数步和偶数步到达的点是不同的。因此就能判出三个无解的必要条件。考虑证明这三个条件合起来充分。

有一个结论是,对任意合法局面,一定存在一个删除某一个块的方案,使得删除后图仍为好的图,且最短路要么不变,要么减小 \(2\)

证明考虑举反例。删掉一个块最短路会减小超过 \(2\) 当且仅当构成了以下局面:

.#.
X#X
.#.

其中 X 为最短路上的点。此时我们去删除最上方的 # 即为一个合法方案。

因此我们可以每次把边界上的点丢进队列,然后每次删除后跑最短路。

然后注意到按照任意顺序删除格子没有影响。由于上文中的结论,对于任意一种删除顺序,最短路一定是从 \(d_{max}\)\(d_{min}\) 连续变化的。那么我们预处理出任意一种顺序,然后二分即可。

B

先考虑怎么快速计算一个 \(g(s)\)

考虑计算出所有的 \(a_i=f(s[1,i],s[i+1,|s|])\)。 对 \(s\) 建后缀自动机,求出每个点 \(u\) 的 endpos 的最小值
\(m(w)\) 与最大值 \(M(w)\),以及他所代表的串长 \([l, r]\)。 对于一个节点 \(w\),可以发现,他对 \(a_i,i\in[m,M− r]\) 的贡献为 \(r-l+1\),而对 \(a_i,i\in[M−r+1,M]\) 的贡献是一个等差数列。 问题变成进行若干次区间加常数与区间加等差数列,最后求值。那直接若干次差分即可。

然后二分答案 \(x\),贪心的每次划分到 \(g(t)\leq x\) 的最长串 \(t\)。一个问题是怎么动态找到这个位置。由于我们的求法是 \(O(|s|)\) 的,因此二分和双指针复杂度都是平方量级的。

考虑一个如下形式的倍增。我们通过在第 \(i\) 次试图将 \(r\) 增加 \(2^i\) 找到 \(r\) 的 highbit,然后从 highbit 开始往下做正常倍增。这样做复杂度就对了。这种倍增的优点在于,单次倍增所涉及的长度和变为了 \(O(x\log x)\) 量级,而不是 \(O(V\log V)\),其中 \(x\) 为答案,\(V\) 为答案的值域。

感觉这种倍增还是很厉害的,以前好像遇到过这种题。

C

论文题,没补。

Day 6

A

最小点覆盖的树上版本。

考虑从下往上跑,每次把一个还没有被覆盖的,且当前这个点为该点的 lca 的链标记上,同时更新在当前节点上的点的覆盖情况。

直接做的话时间复杂度是 \(O(n^2)\) 的,原因是要把链挂到每个节点上。我们考虑树剖,这样每个链被拆分成了\(O(\log n)\) 个 dfs 区间。然后我们在 \(lca\) 上挂上对应的节点。每次到一个节点时,我们去检查其拆分出的 dfs 区间内是否有被标记的点,这样做单次 check 的复杂度是 \(O(\log^2 n)\) 的。追求更好的复杂度可以前缀和分块,时间复杂度 \(O(n\log n+n\sqrt n)\)。后面那部分有 \(\frac{1}{2}\) 常数,所以跑的应该比 \(O(n\log^2 n)\) 快一点。

B

考虑从大向小加点地 dp,设 \(f(i,j,k)\) 表示加入了 \([i,n]\) 的点,目前形成了 \(j\) 个连通块,目前存在 \(k\) 条边的儿子没有确定。那么我们每加一个点 \(u\), 要考虑的是它的父亲连向谁,以及它的两个儿子分别是谁。 对于父亲来说,它的父亲 \(p_u\) 若有 \(p_u>u\) 那么 \(p_u\) 已经被加入,可以选择一条儿子没有确定的边连上。否则暂时认为其没有父亲,形成一个新的连通块。

对于一个左儿子 \(l_u\),可以选择不连,可以选择连 \(l_u>u\),那么就是选择 先前一个连通块的根连起来。否则选择 \(l_u<u\),要连的点还没有加入 进来,故形成一个儿子没有确定的边。右儿子的情况同理。于是可以枚举儿子数量转移。注意到为了防止连成环,需要容斥掉连向子树的情况。

C

注意到有递推式 \(f_i=bf_{i-1}+\sum\limits_{j=0}^{i-1} a^{i-j-1}cf_j\)。观察下面那个式子,很有二项式定理的感觉,不妨设答案矩阵为 \(M\),那么我们结合上递推式,构造矩阵 \(M=\left[\begin{array}{c}a+c+1&b\\c&b+1\end{array}\right]\) 并对其进行矩阵快速幂,容易发现其左下角元素即为所求。

Day 7

A

直接随机的期望随机次数是 \(O(V)\) 量级的。考虑生日悖论。在随机 \(k\) 次后,我们能够通过两两加和得到 \(O(k^2)\) 个取值。那么我们只去随机半颗子树(标号为 \([2,25]\)),同时计算将其标号为 \([26,49]\) 的结果,每次随机出一个树以后,在前面随机过的里寻找一个和其相加为模数的树,将其以 \(1\) 号节点为根拼起来即可。细节有点多,主要在算跨子树的贡献上。

B

谢谢你,八先生/qd。

考虑选择两个数 \(p,q\),满足 \(p+q=2\lfloor\frac{n}{2}\rfloor\),那么 \([1,n]\) 中的每个数字一定都能被表示为 \(xp-yq\) 的形式。证明可以参见哥德巴赫猜想。构造可以考虑令 \(cur\) 初始为 \(1\),每次能加 \(p\) 则加,否则减 \(q\)

注意特判一些边界,哥德巴赫猜想成立的条件是 \(n\ge 6\)

C

首先,放棋子的方案数和染黑位置无关,只与个数有关。因此,我们可以直接组合数算出放 \(k\) 个黑点的方案数。然后是棋子,有些位置不能填,也可以通过容斥求出方案数。然后本质上是个卷积,NTT 即可。

Day 8

A

套路 dp,把所有贡献在出去的时候计算。设 \(f(i,j)\) 表示考虑到第 \(i\) 个位置,当前还有 \(j\) 个无标号的左括号的方案数是多少。有标号的左括号可以类推出来。然后匹配到右括号时统计贡献。

B

posted @ 2023-05-29 23:11  -Comρℓex-  阅读(97)  评论(0编辑  收藏  举报