牛客網暑期ACM多校訓練營(第五場)F take

2021-08-22 06:20:57 字數 1248 閱讀 2119

題目意思就是從前往後有n個箱子,每個箱子中有p[i]的概率會出現價值為d[i]的鑽石,當箱子內的鑽石價值大於當前手上的鑽石的價值的時候,將手上鑽石跟箱子內的鑽石交換,問最後交換次數的期望。

思路:結果要求的是交換次數的期望,我們可以將每個箱子交換的期望求出來相加即可。那麼顯而易見的是,當前箱子交換的概率即為該箱子之前的所有d[i]大於當前箱子的箱子內的鑽石都不出現的概率乘以當前箱子出現鑽石的概率。

我們可以首先將d從大到小排序,用線段樹維護1 - pi的字首積。每次插入前查詢在它前面比他大的概率的乘積(因為從大到小插入了,所以線段樹裡面的插入的都是d比他大的)由於維護的是乘積,所以我們線段樹初值要初始化成1。

#include

#include

#include

#include

using namespace std;

#define ll long long int

#define lson rt<<1,l,m

#define rson rt<<1|1,m+1,r

const int mod = 998244353;

const ll inv = 828542813;

int n;

ll tre[100100

<< 2];

struct node

s[100100];

bool cmp(node a, node b)

void build(int rt, int l, int r)

void update(int rt, int l, int r, int

pos, int

x) int

m = l + r >> 1;

if (pos

<= m) update(lson, pos, x);

if (pos > m) update(rson, pos, x);

tre[rt] = tre[rt << 1] * tre[rt << 1 | 1] % mod;

}ll query(int rt, int l, int r, int l, int r)

int main()

sort(s, s + n, cmp);

build(1, 1, n);

ll res = 0;

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

printf("%lld\n", res);

return

0;}

牛客網暑期ACM多校訓練營(第五場)

二分答案,然後就轉化為是否滿足 frac d sum s i c i sum s i d sum s i c i d 0 顯然科目越少gpa越高,於是去掉最小的k個判斷即可。include define rep i,a,b for int i a i b i define per i,a,b for...

牛客網暑期ACM多校訓練營(第五場) (A,F)

比賽鏈結 a gpa題意 給出kanade的n門課的學分si和成績ci,kanade的gpa計算方法如下 解析 典型01分數規劃問題,按模板做就好,01分數規劃問題 所謂的 01分數規劃問題就是指這樣的一類問題,給定兩個陣列,a i 表示選取 i的收益,b i 表示選取 i的代價。如果選取 i,定義...

2020牛客暑期多校訓練營(第五場)

總結 f題添老師一發ac,i 題起初不會做在想怎麼化簡那個式子,後來就直接畫出了最優的圖,然後猜了一發2 3過了。ef 一級目錄 一級目錄 一級目錄 乙個包括n個音符的陣列,音符按下標1 n排列,表示音符由低到高。有兩個操作 drop 2 將第二高的音符移到最低的位置 即將倒數第二個移到第乙個。in...