洛谷P9533 区间翻转区间异或和 题解
原题:洛谷P9533
一道性质题#
不难发现,区间翻转操作是没有用的(虽然比赛的时候想了好久www)#
首先,区间翻转要想对答案有贡献,一定是下边这种情况:
三个连续的区间:
满足:。
将 这个灵异区间进行翻转,使 和 合并到一起,会增加一个灵异区间 。
但是,如果 ,那么 也有。
因为:若 ,则 。
所以 ,即 。
所以翻转前 也是灵异区间,而反转后这个灵异区间就没有了。
所以区间翻转实际上是没用的。#
然后就好写了,统计原数组的灵异区间即可#
原理很简单:维护一个异或前缀和 ,并用 记录前缀和为 出现的次数。
比如如果 ,则区间 的异或和为0,即为灵异区间。
且 若也有 ,则区间 中共有 个灵异区间()。
即若前缀和 出现了 次,则灵异区间有 个
我们再用 数组记录每种不同的前缀和,遍历 数组计算并统计灵异区间数量即可。
还要特殊处理一下 ,很简单, 的初值是 ,我们把这个 也计入计算即可
n=read();
cnt[0]=1;a[++tot]=0;
while(n--)
{
sum^=read();
if(!cnt[sum]) a[++tot]=sum;
cnt[sum]++;
}
for(reg int i=1;i<=tot;i=-~i) ans+=cnt[a[i]]*(cnt[a[i]]-1)/2;
printf("%lld",ans);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探