CF1718A:Burenka and Traditions 题解

黑历史,长期未补的A题。

A:

题意:给出初始数列a,每次操作可以选择区间 [l,r] 和整数 x,将区间每个数异或上 x,花费 rl+12。求把所有数变成0的最小花费。

Solution:

容易想到,长区间没有意义,我们只需要用长度为2或1的区间,它们花费都是1。

如果用2区间从左往右扫,每次把最左边的数归零,如果到右边只剩下一个数,那么只能再用一次1区间,但你发现这样的花费,和全部用1区间是一样的,没啥用。

所以2区间是干什么的,发现像“1,3,2”这样的连续数列,使用2区间不会使右边剩下一个数,而是正好消掉,相比全部用1区间可以省1个花费。这样的区间满足异或和为0,因为用2区间左边异或 x 右边异或 x ,区间的和是不变的。

题解:先全部用1区间异或每一个数,再看看哪些区间可以用2区间来省花费,其实就是看看数列能分成多少个异或和为0的区间(为方便表示,ai=0 也算),可以简单dp求出。

my submission

看到异或就想两个事情:1.分二进制位来求。2.异或两次同一个数可以抵消。


__EOF__

本文作者枫叶晴
本文链接https://www.cnblogs.com/maple276/p/17969827.html
关于博主:菜菜菜
版权声明:呃呃呃
声援博主:呐呐呐
posted @   maple276  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示