bzoj 4017 小Q的無敵異或

2022-06-03 10:36:10 字數 1873 閱讀 4426

time limit: 20 sec  memory limit: 128 mb

submit: 736  solved: 242

[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 0100%的資料滿足n <= 10^5, ai <= 10^6。

很棒的一道題啊hhhhhh。

很顯然第一問是easy模式,直接處理出字首xor陣列直接拆位算貢獻好啦(因為太簡單就不仔細說這一部分了hhhh)。

第二問嘛,,,稍微有那麼點麻煩hhhhh

考慮到字首和可能是 10^11 級別的,所以我們的二進位制要考慮前30多位,並且將會涉及一系列long long的問題(哪一步不小心可能就炸int了hhhh,但為了卡一卡常我盡量都用int.....)。

因為答案是所有區間和異或起來,所以我們就依次考慮 2^i 在答案裡是1還是0就好了,然後請轉到 :  ,我是延用了我早期解這個題用的套路 (只不過太早期了在我的部落格裡找不著hhhh),就是考慮第i位的時候,把所有數分成 這一位是1 和 這一位是0 兩種數,分別計算(這裡就把推東西的環節留給你們 了hhhh),只不過這個題的字首和太大了,我們還需要離散化一下。

emmmm然後就做完了。

#include#define ll long long

using namespace std;

const int ha=998244353,maxn=100005;

int n,m,xor[maxn],num[35][2],f[2][maxn],ky;

inline int add(int x,int y)

inline void update(int t,int x)

inline int query(int t,int x)

ll a[maxn],now,n[maxn],a[maxn],ci[66];

inline int solve1()

return ans;

}inline ll solve2()

if(tmp&1) ans+=ci[i];

} return ans;

}int main()

bzoj 4017 小Q的無敵異或

time limit 20 sec memory limit 128 mb submit 593 solved 197 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 ...