bzoj 4017 小Q的無敵異或

2022-06-02 07:12:08 字數 1809 閱讀 8405

time limit: 20 sec  memory limit: 128 mb

submit: 593  solved: 197

[submit][status][discuss]背景

小q學習位運算時發現了異或的秘密。

描述小q是乙個熱愛學習的人,他經常去維基百科(學習電腦科學。

就在剛才,小q認真地學習了一系列位運算子(其中按位異或的運算子 xor 對他影響很大。按位異或的運算子是雙目運算子。按位異或具有交換律,即i xor j = j xor i。

他發現,按位異或可以理解成被運算的數字的二進位制位對應位如果相同,則結果的該位置為0,否則為1,例如1(01) xor 2(10) = 3(11)。

他還發現,按位異或可以理解成數字的每個二進位制位進行了不進製的加法,例如3(11) xor 3(11) = 0(00)。

於是他想到了兩個關於異或的問題,這兩個問題基於乙個給定的非負整數序列a1, a2, ..., an,其中n是該序列的長度。

第乙個問題是,如果用f(i, j)表示ai xor ai+1 xor ... xor aj,則任意的1 <= i <= j <= n的f(i, j)相加是多少。

第二個問題是,如果用g(i, j)表示ai + ai+1 + ... + aj,則任意的1 <= i <= j <= n的g(i, j)異或在一起是多少。

比如說,對於序列,所有的f是,加起來是6;所有的g是,異或起來是0。

他覺得這兩個問題都非常的有趣,所以他找到了你,希望你能快速解決這兩個問題,其中第乙個問題的答案可能很大,你只需要輸出它對998244353(乙個質數)取模的值即可。

第一行乙個正整數n,表示序列的長度。

第二行n個非負整數a1, a2, ..., an,表示這個序列。

兩個整數,表示兩個問題的答案,空格隔開,其中第乙個問題的答案要對998244353(乙個質數)取模。

2 1 2

6 0此題求解該序列所有可能存在的子區間的異或和以及和的異或。

對於第一問求解區間的異或和。這一問在2017西安現場賽g題出現過,只不過把整個區間改為詢問指定的區間。那麼我們把每個數拆開,一位一位地來算貢獻。在某一位上,我們做乙個異或的字首和,即把+換為^。那我們要求解某個區間[l,r]的異或值,即為sum(r)^sum(l-1)。包含0位置在內共有n+1個端點。我們統計下這個字首和為1的端點數有k個,那麼為0的就有(n+1-k)個,那麼區間倆端點必須由不同數組成異或才為1(即sum(r)和sum(l-1)),這樣的區間我們能選擇k*(n+1-k),這即為第一問答案。

對於第二問。我們依舊拆開一位一位做。假如這是第k位,我們做%(2k+1)的字首和。

如果第k位為1 ,那麼(sum(r)−sum(l−1))mod 2k+1

≥2k,這點顯而易見。

用ans存這位是否為1,。我們從小到大列舉r,看滿足這個等式的l-1是否為奇數個,如果是則ans^=1,否則不管。

但這東西不拆開來是不好做的。這個式子拆開 mod前的數並變換可以得出兩個式子來限定sum(l-1)%(2k+1)的取值範圍:

sum(l−1)mod 2k+1

≤(sum(r)mod2k+1

)−2k 

,0≤sum(l−1)mod2k+1

,即 0

≤sum(l−1)mod2k+1

≤(sum(r)mod2k+1

)−2k

。sum(l−1)mod2k+1

≤(sum(r)mod2k+

1)−2k

+2k+

1=(sum(r)mod2k+1

)+2k 

,sum(r)mod2k+1

,即 sum(r)mod2k+1

≤(sum(r)

bzoj 4017 小Q的無敵異或

time limit 20 sec memory limit 128 mb submit 736 solved 242 submit status discuss 背景 小q學習位運算時發現了異或的秘密。描述小q是乙個熱愛學習的人,他經常去維基百科 學習電腦科學。就在剛才,小q認真地學習了一系列位運...

bzoj4017 小Q的無敵異或 數學

一般和異或相關的求和都是一位一位來的。這題也一樣。首先看第一問。令sum i a 1 a 2 a i 那麼xor l,r sum l 1 sum r 考慮每一位對答案帶來的影響。假設現在考慮二進位制第k位 從低到高 對答案的影響。對於sum x 它的第k位對答案的影響為2 k t,其中t為1.x 1...

BZOJ4017 小Q的無敵異或 位運算

題目鏈結 小q的無敵異或 好久之前做的這道題了 參照了別人的部落格 還是沒有全懂。第乙個問題維護個字首就好了,第二個問題還要用樹狀陣列維護 1 include 2 3using namespace std 45 define rep i,a,b for int i a i b i 6 define ...