2021 牛客暑期多校训练营 1
队友跑路,痛苦单打。
AC Codes
A. Alice and Bob
Alice 和 Bob 从两堆石子(石子数分别为 n,m )中取石子,Alice 先手选择一堆,从中取 k(k>0) 个;Bob 后手只能选择另一堆,从中取 sk(s≥0) 个,谁不能取就输了。询问谁必胜?
T(T≤104) 组询问,n,m≤5000 。
注意到 Bob 的必胜态很少,大力出奇迹,直接 sg 打表 + 剪枝。
B. Ball Dropping
球和等腰梯形相切的模型。
相似三角形推一下公式。
D. Determine the Photo Position
签到。
E. Escape along Water Pipe
显然是个模拟,所以我写不动了。
不论管子长什么样,我们从某一个单元格走出只有 4 种情况,因此只需要存 4nm 种状态,直接暴搜所有情况。
F. Find 3-friendly Integers
T 组询问,每次询问区间 [L,R] 中的 3-friendly 数字数量,3-friendly 数字指的是:该数字中存在一段连续子串为 3 的倍数。
T≤104,L≤R≤1018 。
数位 dp 硬草过去,不过这样不够优秀。实际上 n≥100 时由于抽屉原理必定是 3-friendly 数,因此暴力一下就行。
G. Game of Swapping Numbers
给定数列大小为 N 的数列 A,B,需要恰好交换 K 次数列 A 中任意两个不同的数,最大化 ∑Ni=1|Ai−Bi| 。
N≤5×105;K≤108;|Ai|,|Bi|≤108 。
先不考虑 K 次的限制,那么最大值就是:A,B 这两个数列中较大的 n 个数减去较小的 n 个数,这步转化有点像 ARC120 D – Bracket Score 2,因此并不难以想到。然后再考虑加上 K 次限制,如果我们将 A,B 这两个数列中较大的 n 个数染成黑色,较小的 n 个数染成白色,那么一黑一白的 (Ai,Bi) 对就不需要变换了,只需要交换二黑或者二白的 (Ai,Bi) 对。
然后考虑:我们应该优先交换哪些同色的 (Ai,Bi) 对?如果我们恰好需要交换这样四个数 Ai,Aj,Bi,Bj ,同时假设 Ai,Bi>Aj,Bj ,不难计算出进行了一步交换后,∑Ni=1|Ai−Bi| 的变化是 2min(Ai,Bi)−2max(Aj,Bj) 。因此我们需要做的就是最大化 2min(Ai,Bi)−2max(Aj,Bj) ,由于 i,j 下标分离,因此只需要对 min(Ai,Bi) 和 max(Ai,Bi) 分别排序并贪心匹配。
虽然题目中要求我们恰好 K 次变换,但是实际上可以直接转化为至多 K 次变换:因为如果变换到最优解的最少步数小于 K ,那么我们可以选择两个无关紧要的位置交换(两个同色的位置),就可以浪费一步了。注意这对于 N>2 的所有情况均成立,但是需要特判 N=2 。
H. Hash Function
给定一个大小为 N 的数组 A ,找一个最小的随机种子 x 使得 Ai(modx) 互不相同。
N≤5×105,Ai≤5×105 。
Ai(modx)≠Aj(modx) 的充要条件是 |Ai−Aj|≠0(modx) ,也就是说,对于所有的 |Ai−Aj| 而言,x 不能成为他们的因子。
如果已知所有的 |Ai−Aj| ,求这样的 x 可以在 O(NlogN) 的时间复杂度下筛出,因此我们需要做的就是求出所有的 |Ai−Aj| 。由于 Ai≤5×105 ,所以直接开一个 500001 大小的桶,然后通过减法卷积求解。如果不知道减法卷积,请参考多项式的各种操作。
I. Increasing Subsequence
给定一个大小为 N 的排列 P ,Alice 和 Bob 轮流取数,并且两人各自满足它后一轮取的数一定在前一轮取的数右边(比如 Alice 前一轮取了 Pi ,后一轮取了 Pj ,那么 j>i ,该条件对 Bob 也单独成立),两人同时满足后一轮取的数一定比前一轮取的数大(比如某一轮中 Alice 取了 Pi ,那么 Bob 下一轮取的数必须 >Pi )。
有多个合法的取数情况时,所有合法的数被选中的概率相等,询问取数的期望轮数。
N≤5000 。
反正比赛的时候没看懂,看了直播才听懂题意。
K. Knowledge Test about Match
给定大小为 N 的数组 A=[0,1,2,…,N−1] 和数组 B 。重排数组 B 使得 ∑N−1i=0√|Ai−Bi| 尽可能小。要求你给出的排列与最优解的平均误差不超过 4% 。
T(100≤T≤500) 组询问,N≤1000,∑N≤4×104 。数据随机。
首先,这个问题显然可以看作完全二分图的最小权匹配,如果不考虑数据范围可以直接 KM。
但是由于时限仅为 1s,所以全部 KM 肯定不行,因此考虑:小范围 KM,大范围贪心。提交了几十发才 AC 了本题,截断点是 N=50 。贪心的正确性纯脑补,我采用了一个冒泡排序的贪心策略,但并不能解释为什么是对的。