题目
https://leetcode.com/problems/make-the-xor-of-all-segments-equal-to-zero/
给定一个数组a和一个整数k。对于a中任意长度为k的连续子数组,要求其中的元素xor和为0。最少需要修改a中的多少个数?
a.size <= 2000, a[i] < 1024
做法
https://leetcode.com/submissions/detail/465921930/
脑子要灵活。不要看啥就是啥。
很容易发现1到k个数与k+1到2k个数是一样的。因此我们只需确定前k个数,使其xor为0即可。
容易想到dp:f[i][j]表示前i个数xor和为j,最少修改多少个数。
看上去是一个O(n^3)的,但实际上只需枚举i有限几个值即可。另外的可能的值转移过程都是一样的。因此时间复杂度O(n^2)。