2020牛客寒假演算法基礎集訓營4 D 子段異或

2022-04-29 06:03:06 字數 883 閱讀 9476

考察點 : 位運算,字首和,異或的性質和應用

坑點 : 0 - l 的異或值是 0 的話也是乙個區間

相同的值可能有多個,那麼這時候區間就會有多個(x * (x + 1) / 2)

怎麼求區間異或值為 0 的區間呢 ? 

在求這個之前,可以想一下怎麼求區間 和 為 0 的區間呢?

我們知道乙個區間和或者區間異或 [l,r] 都可以表示為 sum[r] - sum[l - 1];

(具體可參考上面那篇部落格 : [關於異或的性質和應用](

那麼區間 和 怎麼才會是 0 呢?是不是只有 相同的兩個數相減才會 = 0,

同樣的,我們知道 相同的兩個值 異或 = 0;

那麼我們只需要先求出所有的異或字首和,然後看有多少值是相等的,然後根據相等的個數來計算區間即可。

#include #include #include #include #include using namespace std;

typedef long long ll;

const int maxn = 2e5 + 10;

int sum[maxn],a[maxn];

int n;

ll cnt = 0;

int main(void)

if(sum[i] == 0) cnt ++;

} sort(sum + 1,sum + 1 + n);

ll ans = 0;

sum[n + 1] = -1;

for(int i = 1; i <= n; i ++) else

} cout << cnt << endl;

return 0;

}

2020牛客寒假演算法基礎集訓營

長期更新,補完為止 2 g 判正誤 題意 t組資料。判斷a d b e c f是否等於g。1e9 a,b,c,g 1e9,0 d,e,f 1e9。保證不會出現指數和底數同為 0 的情況。思路 硬算會tle或mle。快速冪取模,為了增加過題概率,多取幾個模數判斷。includeusing namesp...

2020牛客寒假演算法基礎集訓營1

找規律,推公式 三角形個數為2 m n m n m 1 n 1 2 m n mn m 1 n 1 2 m n mn m 1 n 1 include include include include using namespace std typedef long long ll const int m...

2020牛客寒假演算法基礎集訓營1

h題 突然發現h題可以用好多種方法做的。方法一 雙指標,維護乙個修改次數小於等於k的區間 include using namespace std typedef long long ll const int mod 1e9 7 const int n 1e5 5 const int inf 0x3f...