近年各省省选

六省联考 \(2017\)

D1T1 期末考试

题意:

\(n\) 位同学,每位同学都参加了全部的 \(m\) 门课程的期末考试,都在焦急的等待成绩的公布。

\(i\) 位同学希望在第 \(t_i\) 天或之前得知所有课程的成绩。如果在第 \(t_i\) 天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生 \(C\) 不愉快度。

对于第 \(i\) 门课程,按照原本的计划,会在第 \(b_i\) 天公布成绩。

有如下两种操作可以调整公布成绩的时间:

  1. 将负责课程 \(X\) 的部分老师调整到课程 \(Y\),调整之后公布课程 \(X\) 成绩的时间推迟一天,公布课程 \(Y\) 成绩的时间提前一天;每次操作产生 \(A\) 不愉快度。
  2. 增加一部分老师负责学科 \(Z\),这将导致学科 \(Z\) 的出成绩时间提前一天;每次操作产生 \(B\) 不愉快度。

上面两种操作中的参数 \(X, Y, Z\) 均可任意指定,每种操作均可以执行多次,每次执行时都可以重新指定参数。

现在希望你通过合理的操作,使得最后总的不愉快度之和最小,输出最小的不愉快度之和即可。

\(1 \leq n, m, t_i, b_i \leq 10^5\)\(0 \leq A,B,C \leq 10^{16}\)

解法:

若固定了每科成绩公布的时间,显然同学等待导致的不愉快度只和公布时间的最大值有关。由于 \(t_i, b_i \leq 10^5\),枚举最大的公布时间,二分后贪心地选就可以做到 \(O(n \log n)\),值域很大,可能需要 __int128

Submission Link.

D1T2 相逢是问候

信息将你我连结。

题意:

你要维护一个长度为 \(n\) 的非负整数序列 \(a_1,a_2,\cdots,a_n\),同时给定两个正整数 \(c,p\)

一共有 \(m\) 个操作,可以分为两种:

  • 0 l r 表示将第 \(l\) 个到第 \(r\) 个数( \(a_l,a_{l+1} ...a_r\))中的每一个数 \(a_i\) 替换为 \(c^{a_i}\),即 \(c\)\(a_i\) 次方,其中 \(c\) 是输入的一个常数,也就是执行赋值 \(a_i = c^{a_i}\)

  • 1 l r 求第 \(l\) 个到第 \(r\) 个数的和,也就是输出 \(\sum_{i=l}^{r}a_i\)

因为这个结果可能会很大,所以你只需要输出结果对 \(p\) 取模的结果即可。

\(1\le n,m \le 5\times 10^4\)\(1 \le p \le 10^8\)\(0< c < p\)\(0 \le a_i < p\),时限 \(2\) 秒。

解法:

考虑一个经典套路。

对于幂塔而言,根据拓展欧拉公式可以递归求解,但事实上可以发现每一步操作模数 \(p\) 都会递归变为 \(\varphi(p)\),根据经典结论我们知道,不断执行 \(p \leftarrow \varphi(p)\),最终 \(p\) 会在 \(O(\log{p})\) 轮内变为 \(1\)。证明考虑若 \(p\) 为偶数,则 \(\varphi(p) \leq \dfrac{p}{2}\),若 \(p\) 为奇数,则除 \(p=1\) 外,\(\varphi(p)\) 为偶数。

这样我们可以发现,对于每个位置,如果幂塔层数超过 \(p\) 变到 \(1\) 所需次数,那么对其继续增加层数并不会影响其值,因为递归到最后,其值甚至都不受 \(a_i\) 的影响。这样我们维护一棵线段树,每个点维护区间内操作次数最小值和区间和。修改暴力递归到所有有意义的叶子节点,然后直接递归求解不超过 \(O(\log {p})\) 层的幂塔。这样总复杂度为 \(O(n \log^3 p)\),其实并不能确保通过。事实上有两种解决方案。一种是注意到数据很弱,将幂塔层数上限调低就可以通过本题,另一种是注意到能优化的复杂度的在快速幂上,我们只需要快速计算 \(c^x\) 对若干常数取模的结果。模数数量为 \(O(\log p)\) 量级,对于每个模数光速幂即可。复杂度为 \(O(n \log^2 {p}+\sqrt{p}\log{p})\)

Submission Link.

D1T3 组合数问题

题意:

给定整数 \(n,p,k,r\),你需要求出 \(\sum \limits_{i = 0}^{+\infty} \dbinom{nk}{ik+r}\)\(p\) 取模的结果。换句话来说,在 \(nk\) 个互相区分物品中无序选出模 \(k\)\(r\) 个的方案数。不保证 \(p\) 为质数。

\(1 \leq n \leq 10^9\)\(0 \leq r < k \leq 50\)\(2 \leq p < 2^{30}\)

解法:

直接考虑组合意义或者代数推导都不容易。考虑一个 DP,记 \(f_{i,j}\) 表示 \(i\) 个互相区分物品中选出模 \(k\)\(j\) 个的方案数。发现有 \(f_{i,j}=f_{i-1,j}+f_{i-1,(j-1)\bmod k}\)。然后直接矩阵快速幂就可以做到 \(O(k^3 \log n)\)。这是 T3?

Submission Link.

D2T1 摧毁“树状图”

题意:

给定一一棵 \(n\) 个点的树,选择两条在边上不交的非空简单路径,求删掉所有路径上的点和相邻的边后树的连通块个数最大值。

\(n \leq 5 \times 10^5\)

解法:

将路径选法分为两类,分别是两条路径是否有交点。对于有交点的,我们直接换根 DP 枚举交点,对于每个交点维护一端为这个点的前 \(4\) 大路径权值和就行。

对于没有交点的选法,必然存在一条边,使得路径在两侧。这个也可以换根 DP 解决。

代码还没实现,感觉不是很好写。

D2T2 分手是祝愿

时空将你我分开。

题意:

给定一个长度为 \(n\)\(01\) 序列和整数 \(k\)。每次操作选择一个值 \(1\leq i \leq n\),将 \(i\) 的所有因数的 \(01\) 状态反转,终止状态为所有数都为 \(0\)。问使用如下策略操作,期望操作次数乘以 \(n!\)\(100003\) 取模的结果是多少。策略为,每一次操作前,如果目前局面的最优操作步数不超过 \(k\),则使用最优操作策略,否则在 \([1,n]\) 中等概率均匀随机选择操作的 \(i\)

\(1 \leq n \leq 10^5\)\(0 \leq k \leq n\)

解法:

考虑对于 \(01\) 序列如何计算最优操作步数。显然是从后往前依次操作每个目前还是 \(1\) 的,并将其因数都反转,复杂度 \(O(n \log n)\)

如果最优步数小于等于 \(k\),显然直接输出最优步数。

否则,我们考虑令 \(b_1,b_2,\cdots,b_n\) 表示最优策略下每个位置是否要被操作。容易发现每次操作都是反转 \(b\) 的某一位,且期望步数只与 \(b\)\(1\) 的数量有关,与具体形态无关。于是可以进行一个 DP。记 \(f_i\) 表示目前最小操作次数为 \(i\),期望多少步使得最小步数为 \(i-1\)。有边界 \(f_n=1\)。转移很容易,有 \(f_i = \dfrac{i}{n}+\dfrac{n-i}{n}(f_i+f_{i+1}+1)\)。将 \(f_i\) 提取出来后就可以直接求出了,总复杂度 \(O(n \log n)\)

Submission Link.

D2T3 寿司餐厅

题意:

\(n\) 件菜,每件有其种类 \(a_i\) 和美味度 \(d_{i,i}\),每件菜数量无限。你可以进行任意轮取菜,每次可以选择 \([1,n]\) 中一个子区间的所有菜。另外,多件菜一起吃可能会有额外效果。具体来说,对于所有 \(i<j\),同时选择 \([i,j]\) 中所有菜会额外获得 \(d_{i,j}\) 的美味度,注意 \(d\) 可正可负。你有记忆功能,对于任意 \(i \leq j\),即使 \(d_{i,j}\) 被多次触发,也只计算一次贡献。但是菜并不是免费的,菜店有一个常数 \(m\)。对于种类 \(x\) 的菜,假设你总共吃过 \(c>0\) 件这样种类的菜,你需要支付 \(mx^2+cx\) 元。你需要最大化你获得的美味度减去你要支付的钱数。你不用输出构造。

\(1 \leq n \leq 100\)\(m \in \{0,1\}\)\(-500 \leq d_{i,j} \leq 500\)\(1 \leq a_i \leq 1000\)

解法:

每个 \(d\) 多次触发只算一次,触发有依赖关系,有负权,最大化答案,不然让我们想到最大权闭合子图模型。

对于所有 \([i,j]\) 建立点,点权 \(d_{i,j}\),对于每个 \([i,j]\) 应该向其所有子区间连有向边,但不难发现只需要连 \([i,j-1]\)\([i+1,j]\) 就行。对于所有 \([i,i]\),向种类点 \(a_i\) 连一条有向边。问题显然等价于图上最大权闭合子图。建立源点汇点,源点向所有非负权点连容量为权值的边,负权点向汇点连容量为权值绝对值的边,保留原图所有边,容量为 \(+\infty\),转成最小割,答案等于正权点权值和减去最小割。

Submission Link.

九省联考 \(2018\)

D1T1 一双木棋

题意:

有一个 \(n \times m\) 网格,Alice 和 Bob 在玩游戏。给定两个 \(n\times m\) 数字棋盘 \(a_{i,j}\)\(b_{i,j}\)。Alice 先手,玩家每次选择网格上某个点落子,满足这个点在第一行或上方的格子已经落过子,并且这个点在第一列或左方的格子已经落过子。当 Alice 在 \((i,j)\) 落子时,获得得分 \(a_{i,j}\),而 Bob 则获得得分 \(b_{i,j}\)。玩家的总得分为每次得分和。双方都希望最大化己方总得分减对方总得分,如果双方都使用最优策略,求最终 Alice 总得分减 Bob 总得分。

\(1 \leq n, m \leq 10\)\(0 \leq a_{i,j},b_{i,j} \leq 10^5\)。时限 \(1\) 秒。

解法:

范围很小。

容易发现任何局面,目前已落过子的格子形成一个左上的楼梯状。具体来说令 \(c_1,c_2,\cdots,c_n\) 为每行的前缀落子个数,则必有 \(c_1 \geq c_2 \geq c_3 \geq \cdots \geq c_n\)。直接状压一手,将 \(c_1,c_2,\cdots,c_n\) 放进状态,转移是简单的。使用 unordered_map 即可通过。对于状态分析,考虑统计方案数其实是一个组合计数问题,具体来说插板就行,算出来状态数大概是 \(10^6\) 级别,可以通过。

Submission Link.

D1T2 IIIDX

题意:

给定 \(n\) 个数的整数序列 \(d_1,d_2,\cdots,d_n\)实数 \(k > 1\)。你需要求 \(d\) 的字典序最大的排列,满足对于所有 \(1 \leq i \leq n\),要么 \(\lfloor \dfrac{i}{k} \rfloor < 1\),要么 \(d_i \geq d_{\lfloor \frac{i}{k}\rfloor}\)

\(1 \leq n \leq 5 \times 10^5\)\(1 < k \leq 10^9\)\(1 \leq d_i \leq 10^9\)。时限 \(2\) 秒。

解法:

典中典套路题。

要求字典序最大,首先考虑到的是从前往后贪心。我们从前往后考虑每个 \(i\),我们希望对于这个 \(i\) 求出最大的 \(d_i\),使得这段前缀固定时,存在填后缀的方案使得序列符合要求。不难注意到每个 \(i\) 的最大 \(d_i\) 可以二分,现在问题转化为如果已经钦定了一段前缀的值,是否存在后缀使得序列符合要求。考虑所有 \(i <j\leq n\),如果 \(\lfloor \dfrac{j}{k}\rfloor \leq i\),则 \(d_j\) 有最小值,否则 \(d_{\lfloor \frac{j}{k} \rfloor}\) 还没有确定,但是不断往前推,每次除以 \(k\) 下取整,必然会到达某个 \(\leq i\) 的位置,那么对于所有 \(i < j \leq n\)\(d_j\) 都有最小值,不妨记为 \(c_j\)

现在判定问题变成了,是否存在一个 \(d_1,d_2,\cdots,d_m\) 的排列,使得对于所有 \(i\),都有 \(d_i \geq c_i\)。这个不是那个经典的 Hall 定理吗?考虑二分图匹配,每个左侧点能匹配到右侧点一段后缀,根据 Hall 定理,又由于左侧点连的是右侧后缀,令 \(a_i\) 表示 \(d_j \geq i\)\(j\) 的个数,\(b_i\) 表示 \(c_j \geq i\)\(j\) 的个数,有解的充要条件为 \(\forall i,a_i \geq b_i\)。我们只需要维护 \(a_i - b_i\) 最小值即可。发现二分后可以直接使用线段树维护之,支持区间加减区间最小值,复杂度 \(O(n \log^2 n)\),实现精细可以在 LOJ 以最坏 \(1.2\) 秒,洛谷 \(1.8\) 秒内的时间通过。洛谷评测机还是太菜了!

二分应该可以放到线段树上,这样可以做到单 \(\log\)

Submission Link.

D1T3 秘密袭击

题意:

给定一棵 \(n\) 个点的树和常数 \(k\),点有点权 \(a_i\)。求所有树上连通块中第 \(k\) 大点权之和,对 \(64123\) 取模。若连通块大小不足 \(k\) 则第 \(k\) 大点权为 \(0\)

\(1 \leq k \leq n \leq 1666\)\(1 \leq a_i \leq 1666\),时限 \(7\) 秒。

解法:

我不会正解,但是数据太菜了。

首先三次方做法应该是容易的。第 \(k\) 大不容易刻画,但是如果点权只有 \(0\)\(1\) 怎么做?直接树上背包就做完了。然后考虑枚举值域每个数 \(x\),令 \(d_i = [a_i > x]\),此时点权为 \(0\)\(1\),做背包,将结果求和即可。这样总复杂度为 \(O(n^3)\),理论上无法通过,但是交上去会发现只超时了一个点,且这个点正好是链。对链特殊做一下就可以通过了。

Submission Link.

D2T1 劈配

题意:

建议自行阅读。

解法:

考虑先求第一问,类似连续攻击游戏,直接从前往后做匈牙利就行,复杂度为 \(O(n^2C)\)\(C\) 很小,可以接受。但是第二问如果直接二分,复杂度是 \(O(n^3C\log n)\),不一定能过。但是只要把所有前缀的结果记录下来,判定时就可以一次找增广路,总复杂度 \(O(n^2C\log n)\),可以通过。

D2T2 林克卡特树

题意:

给定一棵 \(n\) 个点的树和整数 \(k\),边有整数边权,可能为负。你需要选择树上恰好 \(k\) 条边,将选定边删去,然后再加入 \(k\) 条权值为 \(0\) 的边,需要保证加边后仍是一棵树,你需要最大化最终这棵树的最长简单路径边权和。

\(0 \leq k<n \leq 3 \times 10^5\)\(\left| v_i \right| \leq 10^6\)

解法:

相当于你要在树上选 \(k\) 条点不相交路径,最大化路径边权和之和。

恰好不好做,我们手玩一下发现结果应该关于 \(k\) 是一个上凸函数啊。证明我也不会。

然后考虑 wqs 二分。现在问题转化为,在树上选若干点不相交路径,每选一条需要花费 \(w\) 代价,你要最大化路径边权和减去代价。

考虑 DP,记 \(f_{i,0/1/2}\) 表示在 \(i\) 子树内选路径,\(i\) 目前不被选择,或在某条路径端点,或是路径中某个度数为 \(2\) 的点时的答案,DP 时同时记录一下选的路径数量即可做到线性,总复杂度 \(O(n \log V)\)

Submission Link.

D2T3 制胡窜

不会。

省选联考 \(2020\) A 卷

D1T1 冰火战士

题意:请自行查看。

解法:

容易发现总能量和其实是两倍的 \(\min\) 状物,这个东西直接维护线段树上二分就能找到 \(\min\) 的分界点,两侧做区间询问就行。

D1T2 组合数问题

题意:

你要求 \(\left(\sum \limits_{k=0}^{n}f(k)\times x^k\times \dbinom{n}{k}\right)\bmod p\) 的值。其中 \(n\), \(x\), \(p\) 为给定的整数,\(f(k)\) 为给定的一个 \(m\) 次多项式 \(f(k) = a_0 + a_1k + a_2k^2 + \cdots + a_mk^m\)\(\binom{n}{k}\) 为组合数,其值为 \(\dbinom{n}{k} = \frac{n!}{k!(n-k)!}\)

\(1 \leq n, x, p \leq 10^9\)\(0 \leq a_i \leq 10^9\)\(0 \leq m \leq \min\{n,1000\}\),不保证 \(p\) 是质数。

解法:

我们考虑将多项式拆开,对于每个 \(a_i\) 求贡献系数。则答案等于 \(\sum \limits_{i=0}^m a_i \sum \limits_{k=0}^n k^ix^k\dbinom{n}{k}\)。这里把 \(x^k\) 展开成下降幂形式,即 \(\sum \limits_{j=0}^k x^{\underline{j}} \dbinom{k}{j}j!\),然后把 \(\dbinom{n}{k}\dbinom{k}{j}\) 拆成 \(\dbinom{n}{j}\dbinom{n-j}{k-j}\),先枚举 \(j\) 后枚举 \(k\),关于 \(n\) 的式子变成了一个二项式定理,直接计算即可。复杂度 \(O(m^2)\)

Submission Link.

D1T3 魔法商店

我还不会保序回归。

posted @ 2024-10-28 21:21  HappyBobb  阅读(25)  评论(0)    收藏  举报