Leetcode 1787 Make the XOR of All Segments Equal to Zero

题目

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)。