国庆题目

Maximize the Largest Component (Hard Version)

  • 题意:

给定一个 \(n\times m\) 的网格,由“.”和“#”字符组成。

如果从该组中的任何单元格开始,通过仅移动到该组中共享一个共同边的另一个单元格,就可以到达该组中的任何其他单元格,则一组“#”单元格形成一个连通分量。其大小为该组中的单元格数量。

在一次操作中,选择任意\(r\) 和任意\(c\),然后将行 \(r\)和列 \(c\) 中的每个单元格设置为 "#"。

问在最多执行一次操作后,可以实现的“#”个单元格的最大连通分量的最大可能大小。

ps:保证所有测试用例中的 $ n \cdot m $ 的总和不超过 $ 10^6 $。

  • 思路:

我们考虑到执行操作不会使答案更劣,所以我们一定会执行这次操作。

考虑到 \(n\times m\leq 10^6\),那么我们可以暴力枚举选择哪行哪列。

考虑到如果在枚举内部统计答案不好做,哥们考虑预处理答案,那么可以单点算贡献。

我们看下一个点会在选哪行哪列时产生贡献。

显然如果该点在原本的图上最左边可到达 \(l1\),最右可到达 \(r1\),最上可到达 \(l2\),最下 \(r2\) 的话,那么哥们会发现,只要我们选的行在 \([l2-1,r2+1]\) 的区间内或所选的列在 \([l1-1,r1+1]\) 的区间内,都可以产生贡献。

那么我们将我们的选择也抽象成一个矩阵,第 \(i\)\(j\) 列记录的就是我们选第 \(i\) 行第 \(j\) 列的答案。

然后就变成一个套路的矩阵中一块的加减法,直接弄一个矩阵差分即可转为 \(O(1)\) 处理,最后再转回来即可,记得特殊处理你选的那行和那列的答案。

时间复杂度 \(O(nm)\)


CF1984F

  • 题意:

有一个长度为 \(n\) 的隐藏数组 \(a_1, a_2, \ldots, a_n\),其元素是介于 \(-m\)\(m\) 之间的整数。

给你一个长度为 \(n\) 的数组 \(b_1, b_2, \ldots, b_n\) 和一个长度为 \(n\) 的字符串 \(s\),字符串由 \(\texttt{P}\)\(\texttt{S}\)\(\texttt{?}\) 组成。

对于从 \(1\)\(n\) (含)的每个 \(i\),我们必须有:

  • 如果是 \(s_i = \texttt{P}\)\(b_i\)\(a_1\)\(a_i\) 的和。
  • 如果 \(s_i = \texttt{S}\)\(b_i\)\(a_i\)\(a_n\) 的和。

输出使得数组 \(a\) 符合要求的将 \(s\) 中的所有 \(\texttt{?}\) 替换为 \(\texttt{P}\)\(\texttt{S}\) 的方案个数。

由于答案可能很大,因此输出答案对 \(998244353\) 取模的结果。

ps:\(2\leq n\leq 2\times 10^3\)

  • 思路:

可以先从简单入手,我们先考虑没有 \(?\) 的情况,

那么我们手玩一下会发现,我们一定能得到数列的总和,因为只要第一个是 \(S\) 或者最后一个是 \(P\) 或者 \(s\) 中有一个 \(PS\) 就一定能得到总和。

然后哥们手玩一下这些限制的关系(\(sum\) 为数列和):

  1. \(PP\) 限制了 \(b_i-b_{i-1}=a_i\),而 \(a_i\) 是有范围的(下同)。

  2. \(SP\) 限制 \(sum+b_i+b_{i-1} = a_i+a_{i-1}\)

  3. \(PS\) 限制 \(sum=a_i+a_{i-1}\)

  4. \(SS\) 限制 \(b_{i-1}-b_i=a_i\)

那也就是说,如果我们真的知道这个 \(sum\),我们就可以用 dp 求出方案数。

观察到 \(n\) 的范围,我们可以直接枚举这个 \(sum\) 在那个位置出现(即上文提到的 \(sum\) 的出现方式),然后 dp 即可,时间复杂度 \(O(n^2)\)


Shuffle

  • 题意:

给定一棵 \(n\) 个结点的树,定义对一棵树的操作如下:

  1. 从树中任选一个节点,把这个结点作为新树的根结点;
  2. 从原树中删除选中结点,并对于剩下的每个连通块(如果有的话)做同样的操作;
  3. 令选中的结点与每个连通块操作后的新树的根连边,形成一棵新树。

求对于给定的树做一次如上操作生成新树的叶结点数量最大值。每个测试点 \(t\) 组测试用例。

  • \(1\le t\le 10^4\)

  • \(1\le n\le 2\cdot 10^5\)

  • \(\sum n\le 3\cdot 10^5\)

  • 思路:

考虑到其实题意就是将这棵树不断删点,然后最后剩下的度为 \(0\) 的点最多,其实就是求树的最大不连通点集,然后这个容易用 dp 求出,但是你会发现,写完后交上去过不了,因为这个翻译有锅(大概。

就是原题中定义的叶子结点是:

Note that leaves are all nodes with degree \(1\) . Thus, the root may be considered as a leaf if it has only one child.

也就是说,如果根只有一个子项,那么他也要算在答案中,但是翻译中并没有提到这点。

那么关于这点,其实就是约等于将原树删去一个度为 \(1\) 的点后再求最大不连通子集,最后加 \(1\)

那么哥们可以将 dp 做一个微调,\(f_{p,0/1,0/1}\) 为该点 \(p\) 选与不选,去掉或还没去掉叶子结点的最大不连通点集,然后常规转移就行了。


"a" String Problem

  • 题意:

给定一个字符串 \(s\),求有多少不同的非空字符串 \(t\),使得存在一种分割 \(s\) 至若干子串 \(p_1 \sim p_k\) 的方法满足:

  • \(p_i \in \{t, \texttt a\}\)
  • 至少存在一个 \(i\) 满足 \(p_i = t\)

ps:\(1\leq t\leq 10^4,2\leq |s| \leq 2\cdot 10^5,\sum |s|\leq 3\cdot 10^5\)

  • 思路:

哥们注意到假设 \(t\) 中有 \(b\) 个非 \(a\) 字符,将 \(s\) 去掉所有 \(a\)(假设剩 \(c\) 个字符),那么显然 \(\dfrac{c}{b}\)\(b|c\),不然显然不符合割的定义。

那么哥们枚举 \(c\) 的因数,得到 \(b\) 的大小,然后直接按规定割就行,然后我们还要考虑 \(t'\) 能向前延伸多少个 \(a\),向后能延伸多少个 \(a\),这个可以按割出的 \(t'\) 的间隙的大小得到限制,然后答案就是限制相乘。

但是我们考虑到,可能 \(b=0\),也就是说,\(t\) 是一个全 \(a\) 的东西,那么此时 \(s\) 一定是一个全 \(a\) 的字符串,直接特判掉就行了。


array-value

  • 题意:

给定序列 \(a\)。定义长度大于 \(1\) 的区间 \([l, r]\) 的权值为 \(a_i \oplus a_j\) 的最小值,其中 \(l\leq i \lt j \leq r\)\(\oplus\) 表示异或。求所有长度大于 \(1\) 的子区间的第 \(k\) 小权值。

\(2\leq n\leq 10 ^ 5\)\(1\leq k\leq \frac {n \cdot (n - 1)} 2\)\(0\leq a_i\leq 10 ^ 9\)

  • 思路:

我们考虑二分这个答案,然后转为判定性问题。

假设哥们二分一个答案为 \(mid\),那么现在也就是问有几个区间,其权值是 \(\leq mid\)

那么由于区间重复问题,哥们为了不算重,考虑枚举这个区间右端点 \(r\),那么我们现在需要找一个左端点,他是 \(r\) 左边第一个使得区间权值 \(\leq mid\) 的点(因为再往左一定包含)。

然后这些关于位运算的东西,哥们可以尝试给他转成树上问题,假设我们把他们的二进制数按顺序整到一棵 \(tire\) 树上,然后我们考虑什么时候,异或出来的东西是 \(\leq mid\) 的,考虑分讨:

我们假设当前数第 \(x\) 位为 \(a\)\(mid\)\(x\) 位为 \(b\)

  1. \(a=0,b=0\) 那么异或上的数的第 \(x\) 位应该顺着 \(1\) 走。

  2. \(a=0,b=1\) 那么异或上的数的第 \(x\) 位是 \(0\) 的都行,这里可以维护一个子树左端点最大值,然后 \(1\) 就顺着走。

  3. \(a=1,b=0\) 那么异或上的数的第 \(x\) 位应顺着 \(1\) 走。

  4. \(a=1,b=1\) 那么异或上的数的第 \(x\) 位是 \(1\) 的都行,这里可以维护一个子树左端点最大值,然后 \(0\) 就顺着走。

然后就以 \(O(n\log^2 V)\) 的时间通过了该题,\(V\) 为值域。


I Love Balls

  • 题意:

Alice 和 Bob 在玩游戏。他们面前有 \(n\) 个球,第 \(i\) 个球的价值为 \(v_i\),且前 \(k\) 个球为“特殊球”,Alice 为先手。每一轮,Alice 或 Bob 会随机从剩余的球中选取一个球并把它取出,获得它的价值。如果这个球为特殊球,则下一轮的玩家不变,否则下一轮的玩家改变。问 Alice 和 Bob 各自得到的价值的期望对 \(10^9 + 7\) 取模的值。

ps:\(1\leq k\leq n\leq 4\cdot 10^5\)\(1\leq v_i\leq 10^7\)

  • 思路:

首先显然每种方案的概率是一样的,这个概率具体而言即:

我们先考虑忽略球的序号的方案,我们发现这个和前面一场模拟赛的 T1 很类似,即:

\(\dfrac{A!\times B!}{n!}\)

然后对于每个不管序号的方案,他们加上序号的影响都是 \(K!\times (n-K)!\)(即你按顺序一一对应)

那么总的概率就是:

\(\dfrac{A!\times B!}{n!\times K!\times (n-K)!}\)

然后问题变为求权值和。

那么我们手玩一下,发现无论特殊点的状态如何,普通点的分配只和 \(n-K\) 的奇偶性有关。

那么枚举 \(Alice\) 拿了 \(x\) 个黑点(特殊点),所以 \(Bob\) 拿了 \(y=K-x\) 个黑点。

然后已知 \(Alice\) 拿了 \(a = \left\lceil\dfrac{n-K}{2}\right\rceil\) 个白点(普通点),\(Bob\) 拿了 \(b = n-K-a\) 个白。

然后你大眼观察,发现 \(Alice\) 的黑点可以随便插入 \(Alice\) 的白点的空隙中,但是特殊的,当 \(Alice\) 的白比 \(Bob\) 的白多一个时,\(Alice\) 的黑点是不能插到最后的白点的后面的,原因显然(\(Alice\)\(Bob\) 多一个白,那么 \(Alice\) 拿万白后应为 \(Bob\) 拿)

然后 \(Bob\) 的黑点可以在容易地方插入。

image

一个红框即为一对白,\(Bob\) 的黑可以插到任意一个红框中,\(Alice\) 的能插到红框的间隙中(最前面永远可以,最后面看奇偶,如上图就不行)、

然后求权值和,由于两人的求法并无本质上的区别,这里只讨论求 \(Alice\) 的。

首先容易发现黑点和白点的贡献分别相同。

  1. 白点:

    \(w\times C_{n-K-1}^{a-1}\times a!\times b!\times K!\)

  2. 黑点:

    \(w\times C_{K-1}^{x-1}\times x!\times y!\times (n-K)!\)

然后就没有然后了。

ps:取模一定要取彻底。

posted @ 2024-10-04 19:27  Nefertari_qwq  阅读(0)  评论(0编辑  收藏  举报