洛谷 P3175 HAOI2015 按位或

2022-08-20 23:45:17 字數 665 閱讀 1628

與hdu4336 card collector相似,使用min-max容斥。

設\(\max(s)\)表示集合\(s\)中最後一位出現的期望時間。

設\(\min(s)\)表示集合\(s\)中最初一位出現的期望時間。

由min-max容斥可得:

\(\max(t)=\sum\limits_(-1)^\min(s)\)

考慮求每乙個\(\min(s)\)。

乙個很顯然的暴力**:

for(int i=0;i<(1《我們考慮對於每乙個集合\(s\),實質上只有與它沒有交集的數對它沒有貢獻。

那麼我們可以用總貢獻減去與它沒有交集的數的貢獻。

即對於每乙個數,只需要對它的補集的子集全部減去它的貢獻即可。

這個很顯然能夠\(o(nlogn)\)計算出來。

那麼就做完啦。

#include using namespace std;

int n;

double p[(1<<20)+5],a[25];

int main()

for(int i=0;ifor(int j=0;jfor(int i=0;i<(1

for(int i=1;i<(1

洛谷 P3177 HAOI2015 樹上染色

懶得複製題面了直接傳送門吧 直接求點與點之間的距離感覺不是很好求,所以我們考慮換乙個求法。瞄了一眼題解 距離跟路徑上邊的長度有關,所以我們直接來看每一條邊的貢獻吧 這誰想得到啊 對於每一條邊,它的貢獻等於 一邊的白點數 另一邊的白點數 一邊的黑點數 另一邊的黑點數 邊權 然後。我又卡住了。再次瞄題解...

洛谷 P3177 HAOI2015 樹上染色

有一棵點數為 n 的樹,樹邊有邊權。給你乙個在 0 n 之內的正整數 k 你要在這棵樹中選擇 k 個點,將其染成黑色,並將其他 的 n k 個點染成白色 將所有點染色後,你會獲得黑點兩兩之間的距離加上白點兩兩之間的距離的和的受益。問受益最大值是多少。有點難想的dp 我果然太菜了 stdcall f ...

洛谷P3175 按位或

剛開始你有乙個數字 0 每一秒鐘你會隨機選擇乙個 0,2 n 1 的數字,與你手上的數字進行或 c c 的 pascal 的or 操作。選擇數字 i 的概率是 p i 保證 0 leq p i leq 1 sum p i 1 問期望多少秒後,你手上的數字變成 2 n 1 設 s 為全集 s 設 e ...