dp_所有长度为K的连续区间、异或

题目给定你长度n=5000的数组A, 【0 <= A[] < 2048】,你可以将任意元素替换成任意数字给定k <= n,要求你所修改后的数组B 满足: 所有长度为k的连续区间,其异或和为0问你最少需要修改几个元素A = [1, 2, 3, 1, 2, 3] k = 3所有的子区间为[1,2,3] [2,3,1] [3, 1, 2] [1, 2, 3],其异或和均为0所以,ans = 0这个问题是非常非常复杂的,如果没找对思路的话首先我们要关注的,其实并不是“异或”这个
摘要由CSDN通过智能技术生成

题目
给定你长度n=5000的数组A, 【0 <= A[] < 2048】,你可以将任意元素替换成任意数字
给定k <= n,要求你所修改后的数组B 满足: 所有长度为k的连续区间,其异或和为0
问你最少需要修改几个元素

A = [1, 2, 3, 1, 2, 3] k = 3
所有的子区间为[1,2,3] [2,3,1] [3, 1, 2] [1, 2, 3],其异或和均为0
所以,ans = 0

这个问题是非常非常复杂的,如果没找对思路的话

首先我们要关注的,其实并不是“异或”这个问题,而是“所有长为K的区间”这个问题
必须从这一点入手!!!

1,给定一个数组【1, 2, 3, 4, 5, 6, 7, 8】 k=3
	'只要涉及到「所有长度为k,的连续区间」问题,就一定要想到: '
	'    这个问题,是有一个 非常奇妙的性质!!! ' 
我们观察:[1,2,3] [2,3,4] [3,4,5] [4,5,6]
  / 任意相邻的两个区间,他们有(k-1)个元素,都是完全相同的!!
  / [1,2,3][2,3,4],他俩 只有14是不同的!!!
  / 而又有: (A1^A2^A3) = 0 = (A2^A3^A4), 所以有: A1 = A4 !!!
  / 该题要求的是“所有区间的 异或和 相同”,其实 如果他要求是 “累加和”“累乘和”等等
  / 只要满足交换律,其实 你都得到 非常关键的信息 “A1 == A4“
  / '即,任意两个相邻的长K区间,他们只有1个元素是不同的,其余都相同'
当然,不仅这一个性质,从这个性质 可以推出更重要的性质:
由”A1 == A4",你必须要非常敏感的察觉到,A1 = A4 = A7 = A10 = ...
  / 这才是本题的关键: "A1 = A1+K = A1+2K = A1+3K = ..."
  
此时,假如说 我们由最初的A数组,得到最终的答案数组B,则这个B 一定满足:
1, B1 == B1+k == B1+2K == B1+3K == ....
	我们根据这个性质,将B数组 分为 K个组
	比如B = [1,2,3,4,5,6,7,8] ,  K=31组: [1, 4, 7]      '同一组的所有元素,均相同!!!'2组: [2, 5, 8]3组: [3, 6]
  比如拿第1[1,4,7]来看,你很容易会想到:
  因为B1=B4=B7=T,  我们令T = (A1, A4, A7)的众数
  这样,就可以 修改最小的元素,从而形成ans
     '你非常容易会这样去想!!!'
     但不要忘记,每个组的元素相同 这一性质
     仅仅是从 "所有长为K的区间" 其异或和相同, 推来的
     即,只要是“所有长为K的区间”异或和相同,你就可以得到: A1=A4=A7=A10=...
     但,本题中 还有一个要求“即,不仅异或和相同,而且这个异或和的值 为0!!'也就是说: 你还要保证: B1 ^ B2 ^ B3 == 0 !!! '
     '   注意, B1 = B4 = B7 同一组的值 都相同的'
2, 如何去保证”B1 ^ B2 ^ B3 == 0“这一性质呢??
	其实称为B1 不太合适, 因为B1 其实不仅代表B1,还代表第1组的值
	因为,第1组 所有的B值 都是相同的
	我们令, G1 = B1 = B4 = B7 = B10 = .
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值