题解 P3943 【星空】

· · 题解

题目链接

传送门

solution

挺考验思维的一道题,考场上猜了各种假贪心居然水过了32分 考虑这道题目中困扰我们的地方:

容易想到用差分思想,p[i]维护第原序列第i-1个点状态与第i个点异或的结果,即可将区间[l,r]取反转化为仅对p[l]与p[r+1]取反

事实上,对一段区间[l,r]取反,若p[l]与p[r+1]均为1,那么它们都会变成0,相当于相互抵消,若其中一个是1,相当于将1移动到0的位置,(p[l]与p[r-1]都是1的情况???)那么抵消任意2个0的最小步数,就是将他们移动到一起的最小步数,每个点所能移动到的距离,就是题目中给出的不同取反长度。于是我们可以O(n,m)求出任意1个1移动到任意位置需要的最小步数。于是题目就转化为了有若干个点,任意2个点之间可以花费一定代价相互抵消,问将所有节点抵消的最小代价。