座位安排(容斥)

2022-09-11 01:36:14 字數 3341 閱讀 9382

有一張圓形的餐桌,這張餐桌有 2n2n

2n個座位。現在有 n

nn 對夫妻就坐,要求男士和女士隔位就坐,並且每對夫妻不能相鄰,求安排座位的方案數。

答案可能很大,請對 998244353

\rm 998244353

998244

353 取模。

3 ≤n

≤1e5

3\leq n\leq 1e5

3≤n≤1e

5.樣例輸入

3
樣例輸出

2
樣例解釋對於 3

33 對夫妻就坐的情況,安排座位的方案如下圖所示:

我們先強制把某個女士認為是序列頭,然後拆環成鏈,只需要把最終答案數除以 n

nn 就行。

我們想想,毫無限制的座位安排有多少種? (n!

)2(n!)^2

(n!)

2 ,分別任意安排男士和女士。

然後,我們來容斥。我們把每對夫妻坐一起看作是乙個條件,那麼先打出「板子」:

∑ i=

0n(−

1)i.

..\sum_^(-1)^i...

i=0∑n​

(−1)

i...

右邊表示限定某i

\tt i

i條件滿足的方案數,注意不是「」 i

ii 個條件,因為這樣辦不到。

對於每個 i

ii ,我們首先得出這麼 i

ii 對夫妻,然後他們之間有相對順序,用階乘:

∑ i=

0n(−

1)i⋅

i!⋅c

(n,i

)...

\sum_^n(-1)^i\cdot i!\cdot c(n,i)...

i=0∑n​

(−1)

i⋅i!

⋅c(n

,i).

..難點來了,把這 i

ii 對夫妻安排在這個圓上,有兩種情況:

因此,把這兩者相加:

∑ i=

0n(−

1)i⋅

i!⋅c

(n,i

)⋅(c

(2n−

i,i)

+c(2

n−i−

1,i−

1)).

..\sum_^n(-1)^i\cdot i!\cdot c(n,i)\cdot\big( c(2n-i,i)+c(2n-i-1,i-1) \big)...

i=0∑n​

(−1)

i⋅i!

⋅c(n

,i)⋅

(c(2

n−i,

i)+c

(2n−

i−1,

i−1)

)...

剩下的沒被選的男士女士們分別隨便排,答案就是:

∑ i=

0n(−

1)i⋅

i!⋅c

(n,i

)⋅(c

(2n−

i,i)

+c(2

n−i−

1,i−

1))⋅

((n−

i)!)

2\sum_^n(-1)^i\cdot i!\cdot c(n,i)\cdot\big( c(2n-i,i)+c(2n-i-1,i-1) \big)\cdot \big((n-i)!\big)^2

i=0∑n​

(−1)

i⋅i!

⋅c(n

,i)⋅

(c(2

n−i,

i)+c

(2n−

i−1,

i−1)

)⋅((

n−i)

!)2

最後別忘除以 n

nn 。

預處理階乘法求組合數,再列舉,時間複雜度 o(n

)o(n)

o(n)

#

include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define

maxn

100005

#define

lllong

long

#define

dbdouble

#define

endl

putchar

('\n')#

define

lowbit

(x)(

-(x)

&(x))#

define

fifirst

#define

sesecond

ll read()

while

(s >=

'0'&& s <=

'9')

return f*x;

}void

putpos

(ll x)

void

putnum

(ll x)

const

int mod =

998244353

;int n,m,s,o,k;

int fac[maxn<<2]

,inv[maxn<<2]

,invf[maxn<<2]

;intc(

int n,

int m)

intmain()

int ans =0;

for(

int i =

0;i <= n;i ++

) ans = ans *

1ll* inv[n]

% mod;

printf

("%d\n"

,ans)

;return0;

}

容斥原理,容斥係數

眾所周知,容斥原理是計數問題中最雞賊的東西 基本上很多計數問題都要用到容斥,但是有的時候你明明知道要容斥就是不知道怎麼容斥 所以特此寫在這裡總結一下 一般來說,這種容斥原理一般有n個性質,滿足第 i 個性質的元素集合為 a i 還有乙個全集 u 現在我們需要統計 ans u bigcap overl...

Cheerleaders(容斥定理)

題意 在乙個m行n列的矩陣裡站k個拉拉隊員,問有多少種方法,四周邊界必須有乙個隊員.這裡用到組合數加容斥定理,將重複的刪除,第一行,最後一行,第一列,最後一列.用到位運算來模擬16種情況.這裡要吐槽一下,中英文輸入法,和case中c的大小寫,wrong了無數次,最後才發現,蛋疼.include in...

容斥原理 數論

兩個集合的容斥關係公式 a b a b a b a b 重合的部分 三個集合的容斥關係公式 a b c a b c a b b c c a a b c 最後可以推廣到n個集合,集合裡的元素為奇數則加,偶數減 hdu 4135 很簡單,直接求出所有的質因子,然後容斥解決 author crystal ...