牛牛的棋盤 容斥原理)

2021-10-08 01:34:18 字數 1977 閱讀 9076

傳送門

前話:太菜了太菜了,想到了容斥,以為很複雜就沒寫

思路:容斥原理。

令集合sri

s_sr

i​​表示棋子不在第i

ii行的方案數,同理sci

s_sc

i​​表示棋子不在第i

ii列的方案數。

根據容斥原理有:

a ns

=∣sr

1‾∩s

rn‾∩

sc1‾

∩scm

‾∣=t

ot−∣

sr1∪

srn∪

sc1∪

scm∣

ans\\=|\overline}\cap\overline}\cap\overline}\cap\overline}|\\=tot-|s_\cup s_\cup s_\cup s_|

ans=∣s

r1​​

​∩sr

n​​​

∩sc1

​​​∩

scm​

​​∣=

tot−

∣sr1

​​∪s

rn​​

∪sc1

​​∪s

cm​​

∣ 顯然可以用位運算實現,因為只有4個集合,直接手動判斷即可。

我們令第0,1

,2,3

0,1,2,3

0,1,2,

3位分別表示是否並上r1,

rn,c

1,cn

r_1,r_n,c_1,c_n

r1​,rn

​,c1

​,cn

​。沒有並上對應的r−−

,c−−

r--,c--

r−−,c−

−。顯然總共有c40

+c41

+c42

+c43

+c44

=(1+

1)4=

16c_4^0+c_4^1+c_4^2+c_4^3+c_4^4=(1+1)^4=16

c40​+c

41​+

c42​

+c43

​+c4

4​=(

1+1)

4=16

種。然後判斷一下是加還是減即可,如果是奇數個並就是減,否則為加。

即該情況貢獻為(−1

)cnt

×c(r

′×c′

,k

)(-1)^\times c(r'\times c',k)

(−1)cn

t×c(

r′×c

′,k)

至於組合數就用遞推或者費馬小定理搞一下就行了。

typedef

long

long ll;

const

int mod=

1e9+7;

class

solution

intsolve

(int n,

int m,

int k)

return

(ans+mod)

%mod;}}

;

費馬小定理acac

ac**:

typedef

long

long ll;

const

int mod=

1e9+7;

class

solution

ll ksm

(ll a,ll n)

return ans;

} ll c

(ll n,ll m)

intsolve

(int n,

int m,

int k)

};

挖坑:怎麼求必須在前x

xx行,後x

xx行,前x

xx列,後x

xx列都有棋子的方案數。

容斥原理 數論

兩個集合的容斥關係公式 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 ...

容斥原理,反演

大概知道為什麼自己水平比較渣啦。一開始只會反演,然後被容斥驚豔到。然後寫了一段時間容斥,反演忘光光。所以融會貫通真的很難。多校的三道題,當時是用反演做的。事實上以前就知道容斥跟莫比烏斯函式值的關係,然後熟練掌握 然後一段時間沒用就忘了哈。簡單來說就是,求乙個數和乙個集合中的數互質的個數,把集合中乙個...

關於容斥原理

容斥原理大概是這樣的,以長方體體積並為例,我們需要用容斥原理容斥出若干個長方體體積的並.首先,我們將每個長方體標號為1 n,那麼這些長方體的取捨顯然可以表示為乙個二進位制的數字s.設f s 表示長方體取捨狀態為s時,長方體的體積並,於是我們可以知道f 111111 有n個1 就是我們最終的所求.好,...