數論 異或,兩道水題。

2022-08-16 08:54:14 字數 1939 閱讀 2239

題目大意:給你n個數(n <= 1000000),第i個數用ai表示(每個a <= 1000000),求出每個數與其之後的數的xor和。

舉個例子吧,比如三個數1 2 3答案就應該為1 xor 2 + 1 xor 3 + 2 xor 3 = 4;

題解:首先有乙個o(n*n)的演算法,就是暴力列舉,可以過40%資料。

程式大體:

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

for (int j = i + 1;j <= n;j ++) ans += a[i] ^ a[j];

很明顯tle,考慮一下兩個數的二進位制的某一位xor能產生貢獻的條件是什麼?就是兩位不同。。。 也就是其中乙個是1,另乙個是0二進位制下的這一位就可以產生貢獻。咦?好像有很大的用。那麼我們可以很容易的想到乘法原理。。。怎麼用呢,用cnt[i]表示n個數在二進位制下的第i為1的有多少個,那麼為0的自然就是n - cnt個,我們可以這樣考慮,讓每乙個這一位為1的和每乙個這一位為0的進行xor,這樣是可以產生貢獻的。然後就用cnt * (n - cnt)種搭配能讓這一位產生貢獻(很明顯這些搭配沒有重複),那麼只要讓cnt * (n - cnt)乘以1 << k -1(k表示當前是第幾個二進位制位)就可以得到第k位的和了。

**如下:

#include #include 

using

namespace

std;

intn;

long

long

ans, a;

long

long cnt[30

];int

main()

for (int i = 1;i <= 20;i ++) ans += cnt[i] * (n-cnt[i]) * (1

<< i-1

); printf(

"%lld

", ans);

} //

tips:別忘了用long long

題目大意:給你n個數(n <= 1e5),每個數為ai(每乙個a <= 1e9)求每個區間xor值的和,這裡吐槽一下,說的資料是1e9實際只有2的16次方的資料(洛谷第乙個討論看見的)

舉個例子吧,比如兩個數1 2,你需要輸出的就是1 + 2 + 1 xor 2 = 6,單獨的乙個數也叫乙個區間。

題解:同樣的暴力列舉每一區間複雜度o(n*n),tle。。。做這道題需要知道若a xor b = c, 那麼a xor c = b;(我不會證明,這是xor的運算性質),然後我們同樣的向二進位制方向想,對於每一位產生貢獻進行考慮,若[l, r]這個區間對於這一位能產生貢獻的條件就是其中1的個數為奇數且0的個數為偶數,或者0的個數為奇數且1的個數為偶數。那麼我們可以求出xor的字首也就是sum[i]表示前i個數的異或值。那麼統計答案只需要求出對於二進位制下的每一位這n個字首中有幾個1,用cnt表示,有幾個0(也就是n - cnt)然後讓每乙個1與每乙個0組合形成乙個區間然後統計就是cnt (n-cnt) 1 << (k -1);

但是這樣是錯的,你會發現你讓他們組合了卻沒有考慮到1-x這樣的區間也就是讓還有cnt個也可以產生貢獻。所以答案統計應該是(cnt (n - cnt) + cnt) 1 << (k - 1)也就是cnt (n - cnt + 1) 1 <<(k -1);

**:

#include #include 

const

int maxn = 100010

;using

namespace

std;

intn;

long

long

ans;

long

long

sum[maxn];

intmain()

printf(

"%lld

", ans);

return0;

}//tips:別忘了開long long

蒟蒻開始跑路。。。

兩道區間DP水題

區間dp,如果不考慮演算法之間的轉化,那麼就是很簡單的,只是邊界不好處理,但用記憶化搜尋就不存在這樣的問題了 方程 f l r max f l r f l k f k 1 r he ad l he ad k 1 head r 1 f l r max f l r f l k f k 1 r head ...

兩道選擇題

教授面帶微笑,走進教室,對我們說 我受一家機構委託,來做一項問卷調查,請同學們幫個忙。一聽這話,教室裡輕微的一陣議論開了,大學課堂本來枯燥,這下好玩多了。問卷表發下來,一看,只有兩道題。第一題 他很愛她。她細細的瓜子臉,彎彎的娥眉,面色白皙,美麗動人。可是有一天,她不幸遇上了車禍,痊癒後,臉上留下幾...

兩道選擇題

記得大學一堂選修課上。教授面帶微笑,走進教室,對我們說 我受一家機構委託,來做一項問卷調查,請同學們幫個忙。一聽這話,教室裡輕微的一陣議論開了,大學課堂本來枯燥,這下好玩多了。問卷表發下來,一看,只有兩道題。第一題 他很愛她。她細細的瓜子臉,彎彎的娥眉,面色白皙,美麗動人。可是有一天,她不幸遇上了車...