UVALive 7040 color 容斥原理

2021-07-25 00:04:38 字數 1658 閱讀 7240

傳送門

大意:給

n 朵花上色,從

m種顏色裡面選擇恰好

k 種顏色,求總數mod 1e

9+7

首先如果用

k 種顏色給花上色的話,肯定是k∗

(k−1

)n−1

種方案,但是要求的是恰好

k 種,很容易想到用容斥原理解決這個問題。 設a

i表示沒選第

i 種顏色的種類數目,則結果為

|a

1¯¯¯

¯∩a2

¯¯¯¯

∩...

∩ak¯

¯¯¯|

=k∗(

k−1)

n−1−

∑|ai

|+∑|

ai∩a

j|+.

..+(

−1)k

∑|a1

∩a2∩

...∩

ak|

很容易計算∑|

ai|=

c1k∗

(k−1

)∗(k

−2)n

−1

同理

∑|

ai1∩

ai2∩

...∩

aij|

=cjk

∗(k−

j)∗(

k−j−

1)n−

1

所以要求的就是

|a

1¯¯¯

¯∩a2

¯¯¯¯

∩...

∩ak¯

¯¯¯|

∗ckm

因為m≤

1e9,

k≤1e

6 這裡面會用到乙個組合數的技巧

ci

m=ci

−1m∗

m−i+

1i

#include 

#include

#include

#include

#include

#include

#include

#define debug(x) cout<<(x)<#define fi first

#define se second

using namespace std;

typedef long long ll;

typedef pair pii;

const int mod = 1e9+7;

const int maxn = 1e6+10;

ll inv[maxn];

ll cm[maxn],ck[maxn];

ll power_mod(ll x,ll n)

return res;

}void cal(ll m,ll k)

}void init()

int main()

else

ans = ans*cm[k]%mod;

}printf("case #%d: %lld\n",++kase,ans);

}return

0;}

UVALive 7040 組合數 容斥原理

朵花上色,從m 種顏色裡面選擇恰好k 種顏色,求總數mod 1e9 7種顏色給花上色的話,肯定是k k 1 n 1種方案,但是要求的是恰好k 種,很容易想到用容斥原理解決這個問題。設ai 表示沒選第i 種顏色的種類數目,則結果為 首先有t組資料,每組資料有 3 個數 n,m,k,分別代表一共有 n ...

HDU 2461 Rectangles(容斥原理)

題意 給出n個矩形的左下角和右上角座標,要求進行m次操作,每次對t個矩形進行塗色 給出這t個矩形的序號 要求計算出每次塗色時需要塗色的面積。塗色可以覆蓋,即每次操作不受前面任何操作的影響 分析 矩形之間可以覆蓋,每次操作要計算覆蓋後圖形的面積,這裡就要用到容斥原理 每次操作時有如下關係式 需要塗色的...

poj 3695 Rectangles 容斥原理

在容斥原理題單裡看到這個題,第一想法肯定是掃瞄線啊。但一看題單分析,還真是容斥。矩形相交的圖形和文氏圖差不多。然後dfs容斥就好了 題單裡第四題 include include include using namespace std struct rec rec rec 30 int nums 30...