はじめに
包除原理を知っていますか? 私は知っています
知ってはいますが, 全然使いこなせていないし使うたびに頭が壊れてしまって 「答えが合ったので, ヨシ!!」と提出してしまうので, ちゃんと勉強しようと思いました
この記事はそのまとめです
本文
とりあえずググりましょう
一番上に wikipedia 先生が出てきたので開いてみると, このような式が乗っています
複雑そうに見えるかもしれませんが, 「積集合をいい感じに足し引きすると和集合になる」というだけです
証明はいつもお世話になっております 高校数学の美しい物語 さんを見るといいでしょう
この式を見ればわかる通り, これは 積集合 から 和集合 を求めています
つまり, ある集合 を決め打ったときに「少なくとも を含む場合」が簡単にわかるときに「少なくとも一つを含む場合」 を 求めようとしています
また, の上位集合を とすると
と書けます ( 個の積集合 = 上位集合全体 と考えています)
これは 元の式の余事象なので, 「一つも含まない場合」を意味します
ここまで集合の形で書きましたが, 競プロではだいたいこのままの形では出ません
競プロの問題文を要約すると, たいていの場合
いくつかの条件が与えられる これらをすべて満たすようなものが何通りあるか求めよ
みたいな感じになります
このせいで, 「なんか包除するのかな~」という気持ちになっても 「条件のうち, これとこれは満たすもの を足し合わせて... ?」 となって混乱してしまいます (僕だけですか?)
上に書いた通り, 包除原理で求めることができるのは 和集合 です
「すべて満たすようなもの」というのは 積集合 なのでこのままでは求められません
そのため, 逆に 「条件を満たさないもの」を考えます
つまり,
いくつかの条件が与えられる これらに一つも違反していないものは何通りあるか求めよ
という感じに言い換えるわけです
すると, この「これらに一つも違反していないもの」は 「少なくともこれとこれは違反するような方法は何通りあるか」のようなものが求められれば包除原理で求められるわけです
おわりに
個人的に, この「条件を満たさないものを考える」というのがとても非直感的だな と感じてしまうため, いつも思考が妨げられていました
こうやってちゃんと考えて少しずつ慣れていけたらな と思います