CF1718A:Burenka and Traditions 题解
黑历史,长期未补的A题。
A:
题意:给出初始数列a,每次操作可以选择区间 \([l,r]\) 和整数 x,将区间每个数异或上 x,花费 \(\lfloor\frac{r-l+1}2\rfloor\)。求把所有数变成0的最小花费。
Solution:
容易想到,长区间没有意义,我们只需要用长度为2或1的区间,它们花费都是1。
如果用2区间从左往右扫,每次把最左边的数归零,如果到右边只剩下一个数,那么只能再用一次1区间,但你发现这样的花费,和全部用1区间是一样的,没啥用。
所以2区间是干什么的,发现像“1,3,2”这样的连续数列,使用2区间不会使右边剩下一个数,而是正好消掉,相比全部用1区间可以省1个花费。这样的区间满足异或和为0,因为用2区间左边异或 x 右边异或 x ,区间的和是不变的。
题解:先全部用1区间异或每一个数,再看看哪些区间可以用2区间来省花费,其实就是看看数列能分成多少个异或和为0的区间(为方便表示,\(a_i=0\) 也算),可以简单dp求出。
看到异或就想两个事情:1.分二进制位来求。2.异或两次同一个数可以抵消。