51nod 1667 概率好題

2021-07-24 13:16:36 字數 1315 閱讀 4248

甲乙兩人在van遊戲。

他們各有k1,k2個集合[li,ri]

每個人可以從各自的每個集合中隨機選出乙個整數。 設s

1=∑甲

選的數 ,s2

=∑乙選

的數若s1>s2甲勝,s1=s2平局,s1< s2乙勝。

求三種情況各自的概率,答案對10^9+7取模(逆元)

k1,k2<=8,li<=ri<=10^7

看到k1k2辣麼小顯然是一種叫做容斥的方法啦

但是發現有上界也有下界的限制還有加有減不好做,我們可以轉換一下模型。

我們可以把甲選的每個數表示成ri

−xi ,把乙選的每個數表示成li

+xi (0 < xi < |i|)

那麼甲勝的情況就是∑(

ri−x

i)>∑(

li+x

i) ∑

(ri−

xi)−

∑(li

+xi)

>0

∑ri−

∑li−

∑xi−

∑yi>0

∑xi+

∑yi<∑r

i−∑l

i 咦?右邊是乙個常數!!!

那麼我們可以寫成∑x

i+∑y

i+z=

sum 的形式(0<=k<=+∞) 其中s

um=∑

ri−∑

li−1

-1是因為前面是小於號,不帶等於。

那麼這樣就變成了一堆有上限的數的和等於乙個常數的套路了。。。

直接隔板法就好了。。。

這個地方k1k2比較小,組合數可以直接暴力求。。。

然後就沒有了。。。

#include 

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

using namespace std;

typedef long long ll;

const int mo=1e9+7;

int ty,n,m,l,r,sum,len[17],ans1,ans2,ans3,ni;

int mi(int

x,int

y) int c(int

m,int n)

void dfs(int

x,int

y,int z)

dfs(x+1,y,z);

dfs(x+1,-y,z+len[x]);

}int main()

}

51nod 1667 概率好題

甲乙進行比賽。他們各有k1 k2 個集合 l i,ri 每次隨機從他們擁有的每個集合中都取出乙個數 s1 甲取出的數 s2 同理 若s 1 s2 甲勝 若s1 s2 平局 否則乙勝 分別求出甲勝 平局 乙勝的概率。對於甲的每個數可以表示為這樣乙個形式ri xi 其中xi 0,ri l i 類似的,對...

51nod1667 概率好題

考慮計算方案數,令xi ai li 0 xi ri l i 得到 l 1 x1 r2 x2 x1 x2?r2 l1 x 1 和 x2 並沒有本質差別,用插板法解決。取等號時可以直接算,取小於等於時可以加入乙個元素來放置多出來的部分。上限用容斥來解決。include include using nam...

51nod 1287 加農炮 好題啊好題

1287 加農炮 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 乙個長度為m的正整數陣列a,表示從左向右的地形高度。測試一種加農炮,炮彈平行於地面從左向右飛行,高度為h,如果某處地形的高度大於等於炮彈飛行的高度h a i h 炮彈會被擋住並落在...