Codeforces Round #832 (Div. 2)
A.Two Groups
题意:将一个数组分为a, b两部分,求
思路:考虑负数和是否大于整数和

B.BAN BAN
题意:你有3 * n 个 "BAN"字符串,现在要求交换任意的两个字符,使得整个字符串的某个子序列不存在 "BAN",求最小交换次数,并输出交换的位置
思路:答案是(n + 1) / 2,因为每交换两个字符可以让两个 "BAN" "消失",让第 i 个 "BAN" 的 ‘B’ 和 第 3 * n - i + 1 个 "BAN" 的 N 交换即可

C.Swap Game
题意:Alice和Bob在玩游戏,Alice先手,游戏规则如下
如果
,则当前操作的人失败
否则,选择一个位置
,让
减一,同时交换
和
问最后谁获胜
思路:判断是否为序列最小值即可,如果
是序列的最小值,那么Bob必胜,否则Alice胜
如果
是序列最小值,那么在Alice第一次必须让
减一,那么Bob可以每次选择
,将这个数字变回位置1,那么每次都是Alice让
减一并且移走,那么最后Bob就可以将
为0时移回位置1,则Bob胜
反之,每次执行让最小值减少操作的人是Bob,让最小值回到位置1的是Alice,那么Alice胜

D.Yet Another Problem
题意:给你一个序列,对于每次询问,你可以选择在给定的位置和
之间选择
和
,要求
并且
将
的所有数字替换为他们的异或和
如果本次询问可以将整个序列变成0,那么输出最小操作次数,否则输出-1
思路:首先,直接对整个区间进行xor操作优于一部分一部分xor的效果,那么开始分类讨论
如果整个区间异或和不等于0,那么直接输出-1
整个区间全是0,输出0
区间长度为奇数,那么直接操作整个区间,输出1
区间长度为偶数,如果
或者
,那么操作
或者
即可,输出2
如果某个前缀或者后缀异或和为0,那么先操作某个前缀or后缀,在操作剩余部分即可,输出2,例如 [3 0 0 3 0 0 0 3],区间长度为偶数,存在一个前缀区间[1, 5] 异或和为0,那么先操作这部分,再操作剩余部分即可