CF1113C-C. Sasha and a Bit of Relax

题目

有任何问题可以在下面评论

在这里插入图片描述

题意:

长度为 n 的数组,问你有几种 a[l] ^ a[l+1] ^ …^ a[mid] = a[mid+1] ^ a[mid+2] ^ … ^ a[r]. mid=(l+r-1)/2 , mid必须是偶数,也就是等号两边都是偶数个。

思路:

小小分析一波:

两边的异或值相等…相等的两个数异或值难道不是0吗, 那不就是求 连续的序列 异或值相等有几个吗? tnnd…

那么问题就转换成了问这个总共的序列 有几个 连续异或值为0 的子序列。

那怎么搞呢?????? 其实和 另一种问题串联下,就大概就能想出来,

  • ( 可以不看这个 ,直接看下面想出的方法)另一种问题: 对一个总序列 问有几个子序列 满足他们的 和 为0 , 前缀和 是吧~~ 判断前缀和相等的话,说明这段子序列的和为0. 同样这个方法也能用在这个问题上:

前缀和 那样 统计 前缀异或我临时想得这个名词,意会下 )出现的次数,出现2次 就有1个段,出现 3次 就有1+2 个段… ,题目中还有一个条件,就是mid必须是偶数,我们开个二维数组记录下他的奇偶性 就行。

~~~~ 另外  因为异或值可能很大,所以我用map来给异或值编号,这样n最大时3e5, 最多有 3e5 个异或值,开这样一个数组空间还是够的。 

代码中 统计奇偶性 不理解的话看这里:
假如 x[l]…x[r] 这段区间异或和为0,那么前缀异或和 now,异或到x[r]的时候,now == x[l-1],l,r是一个奇数一个偶数,l-1和r 的奇偶性肯定相同

代码:

#include<bits/stdc++.h>
#include<map>
#define ll long long
using namespace std;
const int maxn=3e6+177;
int l[maxn][5];
map<int,int >ma;

int main(){
    int n;
    cin>>n;
    int x;
    int now=0;
    ll ans=0;
    memset(l,0,sizeof(l));
    l[1][0]=1;
    ma[0]=1;
    int cnt=2;
    for(int i=1;i<=n;i++){
        cin>>x;
        now=now^x;
        if(!ma[now]){
            ma[now]=cnt++;
        }
  //      cout<<now<<"    $  "<<i<<endl;
        ans=ans+l[ma[now]][i&1];    
        l[ma[now]][i&1]++;     //出现次数加1
    }
    cout<<ans<<endl;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本项目是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。该系统主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者,包含项目源码、数据库脚本、项目说明等,有论文参考,可以直接作为毕设使用。 后台框架采用SpringBoot,数据库使用MySQL,开发环境为JDK、IDEA、Tomcat。项目经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。 该系统的功能主要包括商品管理、订单管理、用户管理等模块。在商品管理模块中,可以添加、修改、删除商品信息;在订单管理模块中,可以查看订单详情、处理订单状态;在用户管理模块中,可以注册、登录、修改个人信息等。此外,系统还提供了数据统计功能,可以对销售数据进行统计和分析。 技术实现方面,前端采用Vue框架进行开发,后端使用SpringBoot框架搭建服务端应用。数据库采用MySQL进行数据存储和管理。整个系统通过前后端分离的方式实现,提高了系统的可维护性和可扩展性。同时,系统还采用了一些流行的技术和工具,如MyBatis、JPA等进行数据访问和操作,以及Maven进行项目管理和构建。 总之,本系统是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。系统经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值