有一張圓形的餐桌,這張餐桌有 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 ...