近年各省省选

六省联考 2017

D1T1 期末考试

题意:

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

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

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

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

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

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

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

1n,m,ti,bi1050A,B,C1016

解法:

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

Submission Link.

D1T2 相逢是问候

信息将你我连结。

题意:

你要维护一个长度为 n 的非负整数序列 a1,a2,,an,同时给定两个正整数 c,p

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

  • 0 l r 表示将第 l 个到第 r 个数( al,al+1...ar)中的每一个数 ai 替换为 cai,即 cai 次方,其中 c 是输入的一个常数,也就是执行赋值 ai=cai

  • 1 l r 求第 l 个到第 r 个数的和,也就是输出 i=lrai

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

1n,m5×1041p1080<c<p0ai<p,时限 2 秒。

解法:

考虑一个经典套路。

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

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

Submission Link.

D1T3 组合数问题

题意:

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

1n1090r<k502p<230

解法:

直接考虑组合意义或者代数推导都不容易。考虑一个 DP,记 fi,j 表示 i 个互相区分物品中选出模 kj 个的方案数。发现有 fi,j=fi1,j+fi1,(j1)modk。然后直接矩阵快速幂就可以做到 O(k3logn)。这是 T3?

Submission Link.

D2T1 摧毁“树状图”

题意:

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

n5×105

解法:

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

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

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

D2T2 分手是祝愿

时空将你我分开。

题意:

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

1n1050kn

解法:

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

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

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

Submission Link.

D2T3 寿司餐厅

题意:

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

1n100m{0,1}500di,j5001ai1000

解法:

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

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

Submission Link.

九省联考 2018

D1T1 一双木棋

题意:

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

1n,m100ai,j,bi,j105。时限 1 秒。

解法:

范围很小。

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

Submission Link.

D1T2 IIIDX

题意:

给定 n 个数的整数序列 d1,d2,,dn实数 k>1。你需要求 d 的字典序最大的排列,满足对于所有 1in,要么 ik<1,要么 didik

1n5×1051<k1091di109。时限 2 秒。

解法:

典中典套路题。

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

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

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

Submission Link.

D1T3 秘密袭击

题意:

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

1kn16661ai1666,时限 7 秒。

解法:

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

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

Submission Link.

D2T1 劈配

题意:

建议自行阅读。

解法:

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

D2T2 林克卡特树

题意:

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

0k<n3×105|vi|106

解法:

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

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

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

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

Submission Link.

D2T3 制胡窜

不会。

省选联考 2020 A 卷

D1T1 冰火战士

题意:请自行查看。

解法:

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

D1T2 组合数问题

题意:

你要求 (k=0nf(k)×xk×(nk))modp 的值。其中 n, x, p 为给定的整数,f(k) 为给定的一个 m 次多项式 f(k)=a0+a1k+a2k2++amkm(nk) 为组合数,其值为 (nk)=n!k!(nk)!

1n,x,p1090ai1090mmin{n,1000},不保证 p 是质数。

解法:

我们考虑将多项式拆开,对于每个 ai 求贡献系数。则答案等于 i=0maik=0nkixk(nk)。这里把 xk 展开成下降幂形式,即 j=0kxj(kj)j!,然后把 (nk)(kj) 拆成 (nj)(njkj),先枚举 j 后枚举 k,关于 n 的式子变成了一个二项式定理,直接计算即可。复杂度 O(m2)

Submission Link.

D1T3 魔法商店

我还不会保序回归。

posted @   HappyBobb  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示