第二屆華北水利水電大學校賽
阿新 • • 發佈:2019-04-12
直接 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);View Code13 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 }
第二屆華北水利水電大學校賽