HEOI2015 小L的白日夢

2022-05-11 04:12:12 字數 2106 閱讀 3294

更好的閱讀體驗

本文參考了yyb大神的題解,並且加入了一些自己的看法

三個性質都可以和暴力拍上,所以應該是正確的

性質1:一定存在最優解每天不高興的概率是單調不增的

看著比較顯然

證明也比較容易,首先按不高興概率單調不增把每個專案排序,說人話就是令\(a_i\ge a_\)

根據期望線性性,當前期望為\(e=\sum\limits_^n(1-a_)a_i\)

考慮類似貪心的臨項交換法,假設兩數在原數列位置是\(i,j\),且\(i,交換,令原式與交換後式子做差

\[\delta=(1-a_)a_i+(1-a_i)a_+(1-a_)a_j+(1-a_j)a_\\

-(1-a_)a_j-(1-a_j)a_-(1-a_)-(1-a_i)a_\\

\]化簡式子

\[=(a_i-a_j)(a_-a_)+(a_-a_)(a_j-a_i)\\

=(a_i-a_j)(a_+a_-a_-a_)

\]因為有\(a_>a_i>a_>a_>a_j>a_\)

所以有\(\delta<0\),所以序列單調不增期望最小

性質2:選擇的一定是排序後的一段字首和一段字尾

不妨設\(i表示四個專案,它們不高興概率為\(a>b>c>d\)

假設我們選擇的原情況是選了\([1,i],j,[l,n]\),期望是\((1-a)b+(1-b)d\)

新情況是選了\([1,i],k,[l,n]\),期望是\((1-a)c+(1-c)d\)

新情況優於原情況時,滿足\((1-a)b+(1-b)d>(1-a)c+(1-c)d\)

解得\(a+d>1\),也就是說,中間點會靠到字尾上,反之靠到字首上

綜上,字首和字尾中間不會有點被選中

先用這兩個性質做,我們可以預處理字首和字尾最大貢獻,列舉字首端點,對於所有字尾而言,找乙個最大的貢獻即可,這樣可以做\(1e6\),但是做不了\(1e9\)

性質3:每個東西要麼選乙個,要麼全選,除了這兩種情況的其它情況最多隻出現一次

首先沒選完整的最多隻可能有兩塊,字首的最後和字尾的最前

考慮字尾最靠前的一段多出來了若干個,把乙個 字尾的多餘 給 字首最後乙個,期望值減少量是\(\delta\),更優,我們不斷減少字尾,直到字尾第乙個塊只剩乙個點,再次削減肯定代價不再是\(\delta\),所以不能轉移了

(根據上面式子可以比較容易得出)

#include using namespace std;

typedef long long lng;

typedef long double ldb;

struct data ;

inline data(int a, ldb b)

: cnt(a), val(b) {};

inline void read()

} a[150000], b[350000];

inline bool operator < (const data &a, const data &b)

int n, m, cas, tot;

inline ldb calc()

rem = m, sum = 0;

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

return ret = min(ret, sum);

}signed main()

sort(a + 1, a + n + 1);

tot = 0;

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

} b[0].val = 1, b[(n = tot) + 1].val = 0;

ldb ans = calc();

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

if (i < n + 1 - i)swap(b[i], b[n + 1 - i]);

for (int i = 1; i <= n; ++i)b[i].val = 1 - b[i].val;

ans = min(ans, calc());

printf("%.6lf\n", (double)fabs(ans));

}}

我的白日夢

我一直很尖銳地覺得公司這般管理,讓人越來越沒有動力了,可能是我極端或者片面的看法。假如我是老闆,1 那些所謂的管理層,實際上既不承擔責任也不承擔任務,說白了就是踩著別人的肩膀卻自以為比別人高的人,能滾多遠就滾多遠。我實在是厭煩了這些人,我要是老闆,我不能忍受在關鍵時候,連個觀點都沒有的所謂的管理層 ...

HEOI2015 小Z的房間

其實是矩陣樹定理模板題。但是要注意不合法的情況預處理的時候設定成0,要不然計算行列式的時候有問題。直接跳過不合法情況,不給它建立新點就行了。如下 include include include include define mod 1000000000 using namespace std int...

矩陣樹定理 HEOI2015 小Z的房間

傳送門 矩陣樹定理 一張圖的基爾霍夫矩陣即為其度數矩陣 鄰接矩陣,度數矩陣中d i i d i i d i i 為點i的度 一張圖的生成樹個數即為其基爾霍夫矩陣的行列式 code include define int long long define n 90 define mod 10000000...