arc133,arc134,arc135题解

发布时间 2023-08-17 11:11:29作者: Feynn

ARC133 A-E

A Erase by Value

扣掉一个数当且仅当这个数后面有更小的数。特判单增即可。

B Dividing Subsequence

相对比较有启发性。发现有倍数关系的数对只有 \(O(n\log n)\) 对,于是可以把对应下标攒成一堆二元组,于是一个合法的取数方案就变成了两个维度分别严格上升的元素集合。按其中一维排序,给第二维做最长上升子序列即可。为了第一维严格,第一维相同的元素按第二维降序排列即可。

C Row Column Sums

正难则反。考虑每个数被扣除的和的最小值,可以发现有方案使得和是行和列的较大值(前提是要合法,即余数相同),随便构造即可。于是就没有了。

D Range XOR

前缀异或和差分一下,问题变成了一个区间内异或和特定的数对数量。整理可以得到后面两位的值,而前面的值等于本身或者等于零,于是枚举最后两位前面搞数位 DP 即可。写起来没什么。

E Cyclic Medians

妈的感觉被诈骗了。

考虑最后答案 \(\ge k\) 的方案数,发现最后的值只和最有一个相同的夹层的颜色有关,如果没有相同的夹层,那么将会保持初始值不变。于是有些人开始了对夹层期望的探寻,许久之后被告知这玩意是对称的,蛤蟆麻了。就和之前的某个题一样,\(k=x,k=n+1-x\) 两个阶段下黑色和白色的数目是相同的,因为概率是相反的。所以只需要把不存在夹层的方案找出来,剩下的情况除以二贡献即可。

ARC134 A-E

A Bridge and Sheets

顺序结构题。

B Reserve or Reverse

简单题。

C The Majority

把重要角色和次要角色一一绑定,然后暴力计算组合数即可。

D Concatenate Subsequences

首先应该保证前半部分字典序最小,所以第一个数应该贪心地选最小的。此时如果发现对应的数有比最小的数还小的(或者相等),那么选择保留这一对显然是最优的。如果没有,那么应该选择前面所有的最小数对应该不劣,最后考虑前半部分后面一丢丢的数对就可以了,即什么时候选进来可以让答案更优。发现后面那个数无关紧要,选择前面的数即可,分类讨论一下和后面第一个选择的数的大小关系即可。

E Modulo Nim

很具象的一道题。

有一些显然的确定态,比如如果存在奇数(并且并不是全都是 \(1\))那么先手选择模 \(2\) 即可让后手去世。接下来就是全都是偶数的情况了,似乎并不是很好分析的样子,于是考虑对 \(4\) 取模再进行讨论。如果存在余数为 \(2\) 的,那么模 \(4\) 即可让对手去世。于是问题就变成了如果全都是 \(4\) 的倍数的情况,然后再对 \(12\) 取模。如果有余数为 \(4\) 或者 \(8\) 的,那么可以对 \(12\) 取模,最后剩下一堆 \(4\)\(8\)。分讨一波:全都是一个数,那么显然有必胜的策略(模 \(3\) 即可),即先手必败;混杂的情况如果对方模 \(3,5,7\),存在奇数先手必胜;如果对方模 \(6\),那么只剩 \(2,4\),先手必胜,其它情况显然。最后只剩全都是 \(12\) 倍数的情况了。由于 \(a_i\le 200\),可能的数的数量不是很大,直接状压即可。方案统计是简单的。

ARC135

A Floor, Ceil - Decomposition

尽量分割成 \(2,3\) 时最优,于是暴力记忆化搜索即可,感官上状态数很少,可以通过。

B Sum of Three Terms

随便做。

C XOR to All

发现任意操作都相当于是整个数列异或上一个数,于是枚举每个数考虑对每一位的影响暴力计算答案取最大值即可。

D Add to Square

首先需要做一个转化。把原来的表格黑白染色,并把黑色的格子取反。这样做有两个好处:一个是新表格的答案和原表格的答案是一样的,因为一个数取反之后绝对值不变;另一个是说这样一来每次操作中每一行每一列都恰好涉及一个白格子和一个黑格子,也就是说这一排的数的和是不变的。

于是答案就很显然了,即每行绝对值之和和每列绝对值之和的较大值。当然可以尝试着去大概证明一下。

首先有一个结论是任意满足行和列和和原表格相同的数都可以由原表格通过一系列操作得到,大概就是可以从一个角落向其它角落操作,最后只有一行一列没被确定,由于和是相同的,所以最后的那一行一列和原表应该也是相同的,这是必要性。

充分性可以通过构造过程来证明,此时问题就变成了希望找到一个表使得其行列和合法并且元素绝对值之和等于我们的答案。思考一下什么时候前者满足而后者不满足,肯定是存在一行中存在两个数一正一负,加起来抵消了,绝对值就产生了浪费。避免这种浪费的方法就是让元素和所在行列和的符号保持一致,于是每次暴力找到一对行和列符号相同就能避免这种浪费。如果找不到了,那么说明有一方已经全零了,剩下的就填充相反数即可,容易发现这样构造出来的表格元素绝对值之和就是前文的答案。

E Sequence of Multiples

多头说得好,这玩意一看就具有阶段性,看不出来打表也能打出来。

量化分析一下。显然贪心地来做,即 \(a_{i}=(\lfloor\dfrac{a_{i-1}}{i}\rfloor+1)i\),记 \(b_i=\dfrac{a_i}{i}\),那么可以得到 \(b_i=\lfloor\dfrac{b_{i-1}(i-1)}{i}\rfloor+1=i-\lfloor\dfrac{b_{i-1}}{i}\rfloor+1\),于是发现将 \(b\) 差分之后的值只和 \(\dfrac{b_{i-1}}{i}\) 有关。

首先给一个比较松的上界。由于每走 \(k\) 个数必定遇到倍数,所以 \(a_i<x+i^2\),故而有 \(b_i<\dfrac{x}{i}+i\)。考虑分治,令 \(B=x^{\frac{1}{3}}\),那么前 \(B\) 个点的段数显然是 \(O(B)\),而 \(B\)\(b\) 的取值都已经是 \(x^{\frac{2}{3}}\) 级别的了,差分值是在 \(x^{\frac{1}{3}}\) 级别的,后面的值只会减不会增,所以段数也是 \(O(B)\) 级别的。所以二分每个段的端点计算贡献复杂度是对的。

二分条件,考虑 \(b\) 的差分数组变化的条件。假设当前计算出来的公差是 \(d\),合法的右边界 \(r\) 应该满足 \(\dfrac{b_{r-1}}{r}=\dfrac{b_l-x(r-l)}{r}=\dfrac{b_l}{l+1}\)。即没有下降的空间即可。然后通过楼上的分析可以得到更加简洁的柿子从而去掉一只 \(\log\),在这里就不写了。

然后来考虑贡献问题。假设当前左右边界为 \(l,r\)\(b\) 是一个首项为 \(c\),公差为 \(d\) 的等差数列,令 \(f(l,r)\) 为等差数列求和,\(g(l,r)\) 是一个区间的平方和,那么贡献应该是:

\[\sum\limits_{i=l}^r(c-ld+id)i=(c-ld)f(l,r)+dg(l,r) \]

计算即可。另外发现 998244353 能被 \(6\) 整除。比较强。