A. Subtract or Divide
(n le 3)时特判。其余情况,若(n)为偶数,则可以直接从(2)转移,答案为(2);若(n)为奇数,则先从(2)转移到(n - 1),再转移到(n),答案为(3)。
B. Non-Substring Subsequence
只要(s[1..l-1])里有(s_l)或者(s[r+1...n])里有(s_r)即可。
C. String Equality
- 根据操作1,元素所处的位置并不影响结果,答案只和数量有关,所以先分别对两个串统计各个字符出现的次数。
- 从小到大枚举小写字母,假设枚举到字符(c),假设(a)中有(c_1)个字符(c),(b)中有(c_2)个字符(c)
- 如果(c_1 ge c2):
- 那么可以令(c_1 = c_1 - c_2),表示(c_2)个字符已经匹配了。
- 现在剩下的(c_1)是要转换成其他更大的字符的,所以如果(c_1)不能被(k)整除,则会有部分(c)无法转换成更大的字符,无解。
- 既然要转移成更大的,不如就直接让这些(c)全都变成(c+1)。
- 否则,根据上一个步骤的第三步,没有其他更小的字符可以拿来转换了,无解。
- 如果(c_1 ge c2):
D. Circle Game
猜结论:两人都采用最优解法是,结束时所走步数必定是最大的。
枚举向(x)轴方向走了多少步,算出此时向(y)轴最多能走多少步,记步数和的最大值为(ma)。
根据(ma)的奇偶性就可以判断是先手必胜还是后手必胜。
E2. Bitwise Queries (Hard Version)
- 首先,(forall i in [2, n]),
XOR 1 i
,记结果为(b_i), 花费(n - 1)次操作机会。 - 如果存在重复元素:
- 以下两种情况必定发生一种
- (b_i = 0),即(a_1 = a_i)。
- (b_i = b_j),即(a_i = a_j)。
AND i j
,花费(1)次操作机会,得到(a_i), 并由此推出(a_1)。
- 以下两种情况必定发生一种
- 否则:
- (a)中元素两两不同。
- (a)中存在(a_i = a_1 oplus 1)。
- (a)中存在(a_j = a_1 oplus 2)。
AND 1 i
,花费(1)次操作机会,得到(x = a_1 & (a_1 oplus 1))。AND 1 j
,花费(1)次操作机会,得到(y = a_1 & (a_1 oplus 2))。- (a_1 = x | y)
- 现在(a_1)已知,(b_i oplus a_1 = a_1 oplus a_1 oplus a_i = a_i)。
反思
C看错题,卡了40min。E想出来了,但是手慢了。
又掉分了,离黄名越来越远。
明年就毕业了,工作之后估计就没时间打了,希望在那之前可以实现上黄的小目标。