日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ARC114E - Paper Cutting 2(组合数学,概率与期望)

發(fā)布時(shí)間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARC114E - Paper Cutting 2(组合数学,概率与期望) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ARC114E - Paper Cutting 2

Solution

考場(chǎng)上時(shí)間不夠,沒剛出來QAQ。

做法和官解本質(zhì)相同,只是官解運(yùn)用期望的線性性直接導(dǎo)出答案,而這里是對(duì)于所有方案統(tǒng)計(jì)貢獻(xiàn)在除以方案數(shù),從期望的定義上計(jì)算答案。可能稍顯復(fù)雜。

Part one

我們要求的是合法操作序列的期望長(zhǎng)度。

問題大概可以用一個(gè)類似《PKUWC2018獵人殺》的經(jīng)典的套路轉(zhuǎn)化為:
設(shè)有一個(gè)W+H?2W+H-2W+H?2條線組成的排列p1p2...pnp_1p_2...p_np1?p2?...pn?,其中pip_ipi?的貢獻(xiàn)為111當(dāng)且僅當(dāng)不存在一個(gè)pj(j<i)p_j(j<i)pj?(j<i)可以把pip_ipi?叉掉,也就是說pip_ipi?前面沒有一個(gè)能結(jié)束游戲或者把pip_ipi?的那一半白紙去掉的數(shù),否則pip_ipi?貢獻(xiàn)為000,一個(gè)排列的貢獻(xiàn)是所有數(shù)的貢獻(xiàn)和。

不難看出每個(gè)排列都映射到一組合法操作序列(即貢獻(xiàn)為111pip_ipi?序列),每個(gè)排列的貢獻(xiàn)對(duì)應(yīng)一組合法方案的長(zhǎng)度,根據(jù)期望的定義(∑cipi\sum c_ip_ici?pi?)容易證明上面所有排列的期望貢獻(xiàn)和就是我們要求的合法方案的長(zhǎng)度和。

Part two

因此我們想要求所有W+H?2W+H-2W+H?2條線的(W+H?2)!(W+H-2)!(W+H?2)!種排列的期望貢獻(xiàn),我們可以求出所有排列的貢獻(xiàn)再除以方案數(shù)。

于是問題變成怎么求(W+H?2)!(W+H-2)!(W+H?2)!種排列的貢獻(xiàn)和。

這里我們運(yùn)用類似這場(chǎng)ARCARCARCCCC題的方法,對(duì)于每個(gè)數(shù),統(tǒng)計(jì)其對(duì)答案的貢獻(xiàn)。也就是考慮這個(gè)數(shù)xxx會(huì)在多少個(gè)排列里貢獻(xiàn)為111,即有多少個(gè)排列滿足在xxx之前不存在能叉掉xxx的數(shù)。

設(shè)行的編號(hào)為1,2,...,H?11,2,...,H-11,2,...,H?1列的編號(hào)為1,2,...,W?11,2,...,W-11,2,...,W?1,不妨令w1<w2,h1<h2w_1<w_2,h_1<h_2w1?<w2?,h1?<h2?(顯然這個(gè)順序沒有影響)。

先考慮列的貢獻(xiàn),分類討論:

  • x<w1x < w_1x<w1?,則前面不能出現(xiàn)在[x,w1)∪[w1,w2)[x,w_1)\cup[w_1,w_2)[x,w1?)[w1?,w2?)中的數(shù)。
  • w1≤x<w2w_1 \leq x < w_2w1?x<w2?,則前面不能出現(xiàn)[w1,w2)[w_1,w_2)[w1?,w2?)中的數(shù)。
  • x>w2x > w_2x>w2?,則前面不能出現(xiàn)在(w2,x]∪[w1,w2)(w_2,x]\cup[w_1,w_2)(w2?,x][w1?,w2?)中的數(shù)。

對(duì)于第一種情況,我們枚舉xxx,再枚舉它在排列中的位置,貢獻(xiàn)即為:
∑i=1w1?1∑j=1W+H?2(W+H?2?((w2?1)?i+1)j?1)\sum_{i = 1}^{w_1-1}\sum_{j = 1} ^{W + H - 2}\binom{W+H-2-((w_2-1)-i+1)}{j - 1} i=1w1??1?j=1W+H?2?(j?1W+H?2?((w2??1)?i+1)?)
用上指標(biāo)求和化簡(jiǎn)得:
∑j=1W+H?2(W+H?2?w2+w1j)?(W+H?2?w2+1j)\sum_{j = 1} ^{W + H - 2}\binom{W+H-2-w_2+w_1}{j}-\binom{W+H-2-w_2+1}{j} j=1W+H?2?(jW+H?2?w2?+w1??)?(jW+H?2?w2?+1?)
這樣就可以O(W+H)O(W+H)O(W+H)計(jì)算了。

第二種和第三種是類似的,行的貢獻(xiàn)也是類似的,這里就不再贅述了。

總時(shí)間復(fù)雜度O(W+H)O(W+H)O(W+H)

Code

實(shí)現(xiàn)上有一點(diǎn)點(diǎn)小細(xì)節(jié)。

//省略快讀和頭文件 int fac[MAXN], inv[MAXN]; inline int upd(int x, int y) { return x + y >= mods ? x + y - mods : x + y; } inline int quick_pow(int x, int y) {int ret = 1;for (; y ; y >>= 1) {if (y & 1) ret = 1ll * ret * x % mods;x = 1ll * x * x % mods;}return ret; } inline int C(int x, int y) { return (x < y || y < 0) ? 0 : 1ll * fac[x] * inv[y] % mods * inv[x - y] % mods; } void Init(int n) {fac[0] = 1;for (int i = 1; i <= n ; ++ i) fac[i] = 1ll * fac[i - 1] * i % mods;inv[n] = quick_pow(fac[n], mods - 2);for (int i = n - 1; i >= 0 ; -- i) inv[i] = 1ll * inv[i + 1] * (i + 1) % mods; } int solve(int n, int h1, int h2, int w1, int w2, int W) {int ans = 0;if (w1 > 1)for (int i = 2; i <= n - h2 + h1 - w2 + w1 ; ++ i)ans = upd(ans, 1ll * fac[n - i] * fac[i - 1] % mods * upd(C(n - h2 + h1 - w2 + w1, i), mods - C(n - h2 + h1 - w2 + 1, i)) % mods);if (w1 < w2)for (int i = 2; i <= n - h2 + h1 - w2 + w1 + 1; ++ i)ans = upd(ans, 1ll * fac[n - i] * fac[i - 1] % mods * C(n - h2 + h1 - w2 + w1, i - 1) % mods * (w2 - w1) % mods);if (w2 < W)for (int i = 2; i <= n - h2 + h1 - w2 + w1 ; ++ i)ans = upd(ans, 1ll * fac[n - i] * fac[i - 1] % mods * upd(C(n - h2 + h1 - w2 + w1, i), mods - C(n - h2 + h1 - W + w1, i)) % mods);return upd(ans, 1ll * (W - 1) * fac[n - 1] % mods); } signed main() { #ifndef ONLINE_JUDGEfreopen("a.in", "r", stdin); #endifint H, W, h1, w1, h2, w2, n; read(H), read(W), read(h1), read(w1), read(h2), read(w2), n = H + W - 2;if (w1 > w2) swap(w1, w2);if (h1 > h2) swap(h1, h2);Init(n);printf("%lld\n", 1ll * inv[n] * upd(solve(n, h1, h2, w1, w2, W), solve(n, w1, w2, h1, h2, H)) % mods);return 0; }

總結(jié)

以上是生活随笔為你收集整理的ARC114E - Paper Cutting 2(组合数学,概率与期望)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。