文章目录
一、LR-remainders
思路
按数组每个位置的被处理的先后顺序,从大到小排序,然后扫一遍数组,因为数组前面的是较后被处理的,所以可以从剩余一个元素向剩余更多元素逐个扩展,计算每次扩展的结果,注意要存在 s t a c k stack stack里面。
二、Anna and the Valentine’s Day Gift
Anna and the Valentine’s Day Gift
思路
A
n
n
a
Anna
Anna的最优选择是,找后缀
0
0
0最多的翻转。
S
a
s
h
a
Sasha
Sasha的最优选择是,保护后缀
0
0
0多的元素。
所以就可以处理出每个元素的后缀
0
0
0个数,并且按照个数升序排序,从后往前遍历,因为
A
n
n
a
Anna
Anna先手,所以只有奇数位置上的元素可以被
A
n
n
a
Anna
Anna操作。
三、Find B
思路
因为 b i > 0 b_i>0 bi>0并且 c i ≥ 1 c_i\geq 1 ci≥1,这也就说明,我们可以尝试把所有大于 1 1 1的 c i c_i ci的多于 1 1 1的那部分向着等于 1 1 1的 c i c_i ci分配,看看在全部分配完成后, c i c_i ci中能否剩下原本的 1 1 1没有被改变即可。
四、XOR-distance
思路
- 当 a 、 b a、b a、b某一位相同时,异或操作没有任何影响,不做考虑,我们假设 a > b a>b a>b.
- 当某一位不同时,第一位不同的保留不变,可以证明 a a a的这一位一定是 1 1 1, b b b一定是 0 0 0,我们设这一位代表的数为 2 k 2^k 2k,然后接下来所有的 b b b的位为 0 0 0的,都异或变为1, a a a同位置变为 0 0 0,因为这样的话,在减法处理的时候,这一位提供 − 2 i -2^i −2i的价值,也就是在使差减小,而且可以证明,即使后面使得 b b b上的每一位上都是 1 1 1,最终的差也不会负向增长,因为 2 k = 2 k − 1 + 2 k − 1 2^k=2^{k-1}+2^{k-1} 2k=2k−1+2k−1, 2 k − 1 = 2 k − 2 + 2 k − 2 2^{k-1}=2^{k-2}+2^{k-2} 2k−1=2k−2+2k−2,不难发现,即使后面所有的二的次幂加起来,也不会有 2 k 2^k 2k多,所以一定会是向最小值靠拢而且不会出现负增长的。
五、Everything Nim
思路
观察到,当最小堆石头数量为1时,那么这个人只能全部拿走,当大于1时,这个人可以选择全部拿走或者拿走 x − 1 x-1 x−1个,当选择拿走 x − 1 x-1 x−1个时,可以保证自己操作完最后一次时使得全部的堆为空,这时是必胜的,所以问题就转化成了,看谁先手拿数量大于1的那一堆,谁就是必胜的。
六、Heavy Intervals
思路
提供一个数学定理
∑
i
=
1
n
a
i
b
i
≥
∑
i
=
1
n
a
i
b
j
i
≥
∑
i
=
1
n
a
i
b
n
−
i
+
1
\sum_{i=1}^na_ib_i\geq\sum_{i=1}^na_ib_{j_i}\geq \sum_{i=1}^na_ib_{n-i+1}
∑i=1naibi≥∑i=1naibji≥∑i=1naibn−i+1
通俗来讲就是
- 对于两个有序序列,顺序之积之和大于等于乱序之积之和大于逆序之积之和(顺序逆序乱序是相对于这两个有序序列来说的)