1. 程式人生 > >第二屆華北水利水電大學校賽

第二屆華北水利水電大學校賽

直接 d3d clu bsp scanf 當前 play div 學校

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

第二屆華北水利水電大學校賽