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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【NOI2019】斗主地【期望】【组合数学】【下降幂】【插值】

發布時間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NOI2019】斗主地【期望】【组合数学】【下降幂】【插值】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:

nnn張牌,從上往下的第iii張牌權值是f(i)=itypef(i)=i^{type}f(i)=itype

進行mmm次洗牌操作,每次操作給定aia_iai?,將從上往下的前aia_iai?張牌分成一堆,后面bib_ibi?張牌分成第二堆。如果兩堆的牌數分別為X,YX,YX,Y,則有XX+Y\frac{X}{X+Y}X+YX?的概率將第一堆的最下面一張牌放在第三堆的最上面,否則將第二堆的最下面放到第三堆的最上面,直到兩邊都沒有牌,第三堆為最終結果。

最后qqq次詢問從上往下第cic_ici?張牌的期望權值 模 998244353998244353998244353

n≤107,m,q≤5×105,type∈{1,2}n\leq 10^7,m,q\leq5\times 10^5,type\in\{1,2\}n107,m,q5×105,type{1,2}

題本身不錯,但結論太好猜,而且要證明必須要先猜出來,出在NOI還是比較失敗的

結論1kkk次洗牌可以看成把第k?1k-1k?1次洗牌后每張牌的期望看成權值洗牌

根據期望的線性性應該很容易理解。

式子證明:

設第k?1k-1k?1次洗牌后第iii張牌是原來的第jjj張牌的概率是P(i,j)P(i,j)P(i,j)
kkk次洗牌后第iii張牌對應第k?1k-1k?1次的第jjj張牌的概率為P′(i,j)P'(i,j)P(i,j)
那么第kkk次后對應原來的編號是
P′′(i,j)=∑k=1nP′(i,k)P(k,j)P''(i,j)=\sum_{k=1}^nP'(i,k)P(k,j)P(i,j)=k=1n?P(i,k)P(k,j)
k?1k-1k?1次后第iii張牌的期望是
E(i)=∑j=1nP(i,j)F(j)E(i)=\sum_{j=1}^nP(i,j)F(j)E(i)=j=1n?P(i,j)F(j)
把它看成權值洗第kkk
E′(i)=∑j=1nP′(i,j)E(j)=∑j=1nP′(i,j∑k=1nP(j,k)f(k)=∑j=1n∑k=1nP′(i,k)P(k,j)f(j)=∑j=1nP′′(i,j)f(j)E'(i)=\sum_{j=1}^nP'(i,j)E(j)\\ =\sum_{j=1}^nP'(i,j\sum_{k=1}^nP(j,k)f(k)\\=\sum_{j=1}^n\sum_{k=1}^nP'(i,k) P(k,j)f(j)\\=\sum_{j=1}^nP''(i,j)f(j)E(i)=j=1n?P(i,j)E(j)=j=1n?P(i,jk=1n?P(j,k)f(k)=j=1n?k=1n?P(i,k)P(k,j)f(j)=j=1n?P(i,j)f(j)

結論2 題目中洗牌的方式相當于(nai)\binom n {a_i}(ai?n?)種方案等概率隨機選擇一種。

即:這(nai)\binom n {a_i}(ai?n?)種方案出現的概率都相等

考慮一個長度為nnn 、有aia_iai?000010101序列sss000表示取第一堆,111表示取第二堆,它和最終洗牌后的牌堆情況一一對應,每個位置選擇的概率只和它后綴中000111的數量有關。

考慮交換兩個相鄰的000111,設它們的下標是iiii+1i+1i+1,不妨設si=0,si+1=1s_i=0,s_{i+1}=1si?=0,si+1?=1

1~i?11\sim i-11i?1i+2~ni+2\sim ni+2n的位置后綴010101數量都沒有變化,貢獻的概率都是一樣的。

i+2~ni+2\sim ni+2n中有xxx000yyy111

交換前這兩位的概率是 x+1x+y?y+1x+y?1\frac{x+1}{x+y}\cdot\frac{y+1}{x+y-1}x+yx+1??x+y?1y+1?

交換后的概率是y+1x+y?x+1x+y?1\frac{y+1}{x+y}\cdot\frac{x+1}{x+y-1}x+yy+1??x+y?1x+1?

所以交換后的概率都是相等的

進而得到所有情況的概率都相等

Q: 按這種思路,為什么按12\frac{1}{2}21?的概率選一堆就不是均勻隨機了呢?

A: 如果可以完全保證12\frac 1221?的概率,那么也是均勻隨機的。但問題出在一堆選完之后,就只能選剩下的一堆,概率實際上不是12\frac 1221?,導致最終結果不均勻。而本題中選完之后概率就是000,并沒有特殊情況。

結論3 無論洗多少次牌,牌堆中第iii張牌的期望權值都是關于iii的不超過typetypetype次的多項式。

采用歸納法,假設第m?1m-1m?1次后是個typetypetype次的多項式,需要證明再洗一次仍然是typetypetype次多項式。

設在m?1m-1m?1次后第iii張牌的期望是E(i)E(i)E(i)mmm次后是E′(i)E'(i)E(i)。我們嘗試用EEE來表示出E′(i)E'(i)E(i),即計算出概率P′(i,j)P'(i,j)P(i,j)

因為是等概率隨機的,計算概率就等價于計算方案數。記 am=Aa_m=Aam?=A,以下的推導中均省略分母中的(nA)\binom nA(An?)

不妨設j≤amj\leq a_mjam?,即只考慮分到第一堆的牌的貢獻,分到第二堆是同理的

我們要讓jjj落到iii的位置上,那么在iii前面選擇的第一堆的牌需要恰好j?1j-1j?1張,iii后面通過組合數算出貢獻的方案

P′(i,j)=(i?1j?1)(n?iA?j)P'(i,j)=\binom{i-1}{j-1}\binom{n-i}{A-j}P(i,j)=(j?1i?1?)(A?jn?i?)

那么可以得到

E′(i)=∑j=1A(i?1j?1)(n?iA?j)E(j)E'(i)=\sum_{j=1}^A\binom{i-1}{j-1}\binom{n-i}{A-j}E(j)E(i)=j=1A?(j?1i?1?)(A?jn?i?)E(j)

你把兩個組合數拆一下,發現完全沒有像常數的意思,不說typetypetype次了,都有點懷疑是不是多項式。

但還有個重要的性質沒用:E(j)E(j)E(j)本身也是typetypetype次的多項式

當然前面一堆組合數,帶幾個單項式進去顯然沒有任何作用。

但看到多項式又有組合數,你想到了什么?階乘冪啊!

E(j)E(j)E(j)轉成下降冪多項式,然后考慮每個下降冪單項式jk ̄(k≤type)j^{\underline k}(k\leq type)jk?(ktype)的貢獻

∑j=1A(i?1j?1)(n?iA?j)jk ̄\sum_{j=1}^A\binom{i-1}{j-1}\binom{n-i}{A-j}j^{\underline k}j=1A?(j?1i?1?)(A?jn?i?)jk?

……等等,前面的分母都有(j?1)!(j-1)!(j?1)!了,我們干脆拆成(j?1)k ̄(j-1)^{\underline k}(j?1)k?好了

∑j=1A(i?1j?1)(n?iA?j)(j?1)k ̄\sum_{j=1}^A\binom{i-1}{j-1}\binom{n-i}{A-j}(j-1)^{\underline k}j=1A?(j?1i?1?)(A?jn?i?)(j?1)k?

看著難受,除一個k!k!k!轉成組合數

∑j=1A(i?1j?1)(n?iA?j)(j?1k)\sum_{j=1}^A\binom{i-1}{j-1}\binom{n-i}{A-j}\binom{j-1}{k}j=1A?(j?1i?1?)(A?jn?i?)(kj?1?)

∑j=1A(i?1j?1)(n?iA?j)(j?1k)\sum_{j=1}^A\binom{i-1}{j-1}\binom{n-i}{A-j}\binom{j-1}{k}j=1A?(j?1i?1?)(A?jn?i?)(kj?1?)

=∑j=1A(i?1j?1)(j?1k)(n?iA?j)=\sum_{j=1}^A\binom{i-1}{j-1}\binom{j-1}{k}\binom{n-i}{A-j}=j=1A?(j?1i?1?)(kj?1?)(A?jn?i?)

=∑j=1A(i?1k)(i?k?1i?j)(n?iA?j)=\sum_{j=1}^A\binom{i-1}{k}\binom{i-k-1}{i-j}\binom{n-i}{A-j}=j=1A?(ki?1?)(i?ji?k?1?)(A?jn?i?)

=(i?1k)∑j=1A(i?k?1i?j)(n?iA?j)=\binom{i-1}{k}\sum_{j=1}^A\binom{i-k-1}{i-j}\binom{n-i}{A-j}=(ki?1?)j=1A?(i?ji?k?1?)(A?jn?i?)

=(i?1k)∑j=1A(i?k?1j?k?1)(n?iA?j)=\binom{i-1}{k}\sum_{j=1}^A\binom{i-k-1}{j-k-1}\binom{n-i}{A-j}=(ki?1?)j=1A?(j?k?1i?k?1?)(A?jn?i?)

引理
∑i(ni)(mk?i)=(n+mk)\sum_i\binom ni\binom m{k-i}=\binom{n+m}ki?(in?)(k?im?)=(kn+m?)
理性愉悅
構造
(x+1)n(x+1)m=(x+1)n+m(x+1)^n(x+1)^m=(x+1)^{n+m}(x+1)n(x+1)m=(x+1)n+m
比較xkx^kxk項系數得證
感性愉悅
n+mn+mn+m件物品選擇kkk件,等價于分成nnnmmm兩堆,在前一堆選任意iii件,在另一堆選剩下的k?ik-ik?i件。

=(i?1k)(n?k?1A?k?1)=\binom{i-1}{k}\binom{n-k-1}{A-k-1}=(ki?1?)(A?k?1n?k?1?)

左邊就是關于iiikkk次下降冪多項式,也就是kkk次多項式,右邊是個無關的常數。因為k≤typek\leq typektype,所以得到的仍然是typetypetype次的多項式。


因為type≤2type\leq 2type2,所以維護333個點值就可以O(1)O(1)O(1)算出任意位置的答案。這里由于懶得寫階乘,維護的是第000項、第一個公差、二階公差。

在洗牌的時候先插值算出兩堆的前333個,然后暴力枚舉求出洗牌后前333個的期望。

另外注意題目中從上到下和從下到上的表述。

#include <iostream> #include <cstdio> #include <cstring> #include <cctype> using namespace std; const int MOD=998244353; typedef long long ll; inline int qpow(int a,int p) {int ans=1;while (p){if (p&1) ans=(ll)ans*a%MOD;a=(ll)a*a%MOD;p>>=1;}return ans; } int A,B,C; inline int calc(int x){return (A+(ll)B*x+(ll)x*(x-1)/2%MOD*C)%MOD;} int main() {int n,m,type;scanf("%d%d%d",&n,&m,&type);if (type==1) A=n+1,B=MOD-1;else A=(n+1ll)*(n+1)%MOD,B=(MOD-2*n-1),C=2;int inv[3]={qpow(n,MOD-2),qpow(n-1,MOD-2),qpow(n-2,MOD-2)};while (m--){int k;scanf("%d",&k);k=n-k;int a[3]={calc(1),calc(2),calc(3)},b[3]={calc(k+1),calc(k+2),calc(k+3)},c[3]={};for (int S=0;S<8;S++){int cnt[2]={},v=1,x=k,y=n-k;for (int i=0;i<3;i++) {if ((S>>i)&1) ++cnt[1],v=(ll)v*y%MOD*inv[i]%MOD,--y;else ++cnt[0],v=(ll)v*x%MOD*inv[i]%MOD,--x;}if (cnt[0]>k||cnt[1]>n-k) continue;cnt[0]=cnt[1]=0;for (int i=0;i<3;i++){if ((S>>i)&1) c[i]=(c[i]+(ll)v*b[cnt[1]])%MOD,++cnt[1];else c[i]=(c[i]+(ll)v*a[cnt[0]])%MOD,++cnt[0];}}C=((c[2]-2*c[1]+c[0])%MOD+MOD)%MOD;B=((c[1]-c[0]-C)%MOD+MOD)%MOD;A=(c[0]-B+MOD)%MOD;}int q;scanf("%d",&q);while (q--){int x;scanf("%d",&x);printf("%d\n",calc(n-x+1));}return 0; }

總結

以上是生活随笔為你收集整理的【NOI2019】斗主地【期望】【组合数学】【下降幂】【插值】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。