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 longusing 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 ...