首页 > 其他 > 详细

第二届华北水利水电大学校赛

时间:2019-04-12 19:32:54      阅读:189      评论:0      收藏:0      [点我收藏+]

Xor and Sum  

之前做过一道异或的。感觉有点眼熟,发现不是。由于对异或一点也不熟悉。所以直接放弃了

首先写出来几项看看。

a:         1   2   4   1    1     2      4

prex :   1   3   7   6    7     5      1

prey:    1   3   7   8    9    11     15

 

可以发现如果区间异或和==区间和,那么缩小区间还是一样的。如果!=,那么扩大区间也是一样的。

所以可以枚举左端点,然后计算区间个数。

如果当前p和i满足,p++就是缩小区间,明显满足,所以可以省去,得出结果I-p。如果不满足,就找到一个满足点。当i=p,肯定满足。

 

技术分享图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=2e5+10;
 4 
 5 int prex[maxn],prey[maxn];
 6 
 7 int main() {
 8     int n;
 9     while(~scanf("%d",&n)) {
10         for(int i=1;i<=n;i++) {
11             int x;
12             scanf("%d",&x);
13             prex[i]=prex[i-1]^x;
14             prey[i]=prey[i-1]+x;
15         }
16         int p=0;
17         long long ans=0;
18         for(int i=1;i<=n;i++) {
19             while((prex[i]^prex[p])!=prey[i]-prey[p]) p++;
20             ans+=i-p;
21         }
22         printf("%lld\n",ans);
23     }
24 }
View Code

 

第二届华北水利水电大学校赛

原文:https://www.cnblogs.com/ACMerszl/p/10697930.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!