Yet Another Problem

遇到连续段的异或和,考虑前缀异或和

对区间\([l,r]\),观察实施一次操作\([L,R]\)后,区间会变成什么样。不难发现,\([L,R]\)的异或前缀和会变成\([sum_R,sum_{L-1},sum_R,...,sum_{L-1},sum_R]\),于是可以知道,如果\(sum_R≠sum_{L-1}\),就无解;如果\([l,r]\)的长度为奇数,操作一次整个区间就可以了,答案为\(1\),如果为偶数,我们尝试转换为前面一种情况,于是如果\(sum_l=sum_r\)或者\(sum_{r-1}=sum_r\),那么就可以像前面一样操作,答案为\(1\),否则的话,此时我们看样例,就会发现,如果我们在\([l,r]\)中找到一个奇数位\(i\)(注意这里的奇数位是相对于\(l\)而言的,如果\(l\)是奇,那么奇数位指下标为奇数,否则指下标为偶数),使得\(sum_i=sum_r\),此时操作两次就可以了,其余情况无解(证:此时可以用数学归纳法证明,无论怎么改变,\([l,r]\)中的奇数位都不可能等于\(sum_r\),而最终序列的所有异或前缀和一定都为\(sum_r\)的)

posted @ 2024-07-22 10:38  最爱丁珰  阅读(1)  评论(0编辑  收藏  举报