【每日一题】Xorto

图片说明
戳我传送

思路:

前缀和sum[i]保存前i个数的异或值,sum[i]=sum[i-1]^a[i],[L,r]的异或值显然是sum[r]^sum[L-1]。
试着枚举右端点i从1到n,得到以i为右端点的全部全部区间的异或值。
为避免重复可以二分一下,同时枚举全部以i+1为左端点的全部区间的异或值,如果和前面的值相等就加上相等的区间个数。
因为n比较小图片说明 (n^2)可以过。
注意:ans比较大,要开ll

Code:

#include<bits/stdc++.h>
#define  js  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
int a[1005],n,sum[1005],ans;
int mp[200005];
int main() {
    js;
    cin>>n;
    for(int i=1;i<=n;++i) {
        cin>>a[i];
        sum[i]=sum[i-1]^a[i];
    }//前缀和 
    for(int i=1;i<=n;++i) {//枚举右端点, 中点 
        for(int j=1;j<=i;++j)
            ++mp[sum[i]^sum[j-1]];
        for(int j=i+1;j<=n;++j)//枚举后面的区间避免重复 
            ans+=mp[sum[j]^sum[i]];//sum[j]^sum[i]相当于区间[i+1,j]的异或值 
    }
    cout<<ans<<endl;
}
每日一题 文章被收录于专栏

牛客每日一题

全部评论

相关推荐

亲爱滴达瓦里氏:又有嵌软又有FPGA又有硬件的,三个方向显得你的简历太杂糅了,展示不出你在某一个方向有哪些技术栈。基本上也不会有企业会去招一个本科的全栈工程师。HR一般是看你的技术栈是否和招聘要求匹配才发面试的。如果你想三个方向都试试的话还是建议你分成三份不同的简历根据不同岗位来投。多看看****或牛客上面的招聘信息,根据上面要求的技术栈来写简历。看了你的帖子经历这一块还是过关的,不过看的每个方向都会一点,但每个方向优势都不突出。 还有就是要海投,你这才几十份算不了啥。去年投了一两百份的大有人在。多去跑跑线下招聘吧,有机会继续搞份实习,后面转正机会大些。有条件就多往北上广深投吧。武汉竞争还是太激烈了。
我的秋招日记
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务