包除原理で解き明かす数え上げの魔法!VRC競プロ部の知恵に迫る

包除原理で解き明かす数え上げの魔法!VRC競プロ部の知恵に迫るのサムネイル

詳細情報

日時 2026年07月22日 21:40 - 22:10
テーマ 包除原理の数え方(仮)
発表者 Mizar_みざーさん
集会名 VRC競プロ部(ABC感想会)
発表資料 ファイル

VRChatの熱気あふれる仮想空間で、また一つ、私たちの知的好奇心を刺激する素晴らしい発表が行われました!
2026年7月22日、VRChat技術・学術系イベントHUBとVketステージのコラボイベントにて、VRC競プロ部のMizar(みざー)さんが登壇。
テーマは、数学やプログラミングの世界で「重複なく数える」ための魔法のようなテクニック、包除原理です。
難しい数式の裏側に隠された、鮮やかなパズルのような解法を一緒に覗いてみましょう!

重なりを賢く処理する「包除原理」の不思議

皆さんは、複数のグループが重なり合っているときに、全体の人数を正しく数えたいと思ったことはありませんか?
例えば、AというグループとBというグループがあったとき、単純に足すと両方に所属している人を2回数えてしまいますよね。
そこで「重なっている部分を1回引く」という操作が必要になります。
これが包除原理の最も基本的な考え方です。

Mizarさんは、この「足して、引いて、また足して……」という繰り返しを、コンピューターにどう効率よく計算させるかを教えてくれました。
集合が3つ、4つと増えていくと、重なり方はどんどん複雑になります。
でも、この原理を使えば、どんなに複雑な重なりも数学的に美しく解き明かすことができるのです。
まるで、絡まった糸を一本ずつ丁寧にかつ大胆に解いていくような、爽快感のある手法ですね!

コンピューターに「数え上げ」を教える魔法のレシピ

スライドでは、この包除原理を実際にプログラムで動かすための「レシピ」が紹介されました。
Mizarさんが提示したのは、DFS(深さ優先探索)という手法を使ったアルゴリズムです。
再帰という、自分自身を呼び出す不思議な構造を使うことで、複雑な集合の重なりを順番に処理していきます。

特に面白いのが、空集合(中身が何もない状態)を見つけた瞬間に計算を打ち切る「枝刈り」という工夫です。
「ここから先は調べても意味がないよ」とコンピューターに教えてあげることで、無駄な計算を劇的に減らすことができます。
限られた時間の中で正解を導き出す競技プログラミングの世界では、こうした「賢いサボり方」こそが、開発者の腕の見せ所なのだと感じさせてくれます。

幾何学の美!回転対称なベン図の世界

発表の中盤では、少し視点を変えて、目で見ても楽しい「ベン図」の話題が飛び出しました。
集合の重なりを図解するベン図ですが、実は「回転対称」な図形を作るには、集合の数が素数でなければならないという驚きの法則があるそうです。

Mizarさんは、5つの集合が美しく重なり合う、5回回転対称なベン図の構成例を見せてくれました。
楕円を組み合わせたり、あえて凹凸のある図形を使ったりすることで、図形同士の隙間をどれだけ効率よく埋められるかという挑戦です。
数学的な厳密さと、パズルを解くような図形遊びの楽しさが融合した、非常にワクワクするトピックでした。
「美しさと正しさは両立する」という、数学の持つロマンを感じずにはいられません。

難問攻略!「重い」ものと「軽い」ものを分ける知恵

後半では、さらに実践的な「Binary String Generators」という問題へのアプローチが語られました。
「0」「1」そしてどちらか分からない「?」が混ざった文字列が何種類作れるか、という難問です。
ここで登場したのが、問題を「Heavy(重い)」と「Light(軽い)」に分けて考えるという、目からウロコの戦略でした。

「?」がたくさんあって複雑なものは、包除原理を使って数学的に処理する。
逆に「?」が少なくて扱いやすいものは、実際にすべてのパターンを書き出してみる。
この「適材適所」の考え方によって、普通に計算したら何年もかかるような膨大な組み合わせを、わずか数秒で解けるようにしてしまうのです。
一つの手法に固執せず、状況に合わせて武器を使い分ける。
この柔軟な発想こそが、技術的な壁を乗り越えるための鍵になるのですね!

私たちの知的好奇心は、仮想空間で加速する

Mizarさんの発表は、一見すると難解な数学の世界を、誰にでも伝わるワクワクする冒険へと変えてくれました。
VRChatという場所で、こうした高度な知恵が共有され、みんなで「面白い!」と言い合えるコミュニティがあることは、本当に素敵なことだと思います。

包除原理という一つの道具から、アルゴリズムの工夫、図形の美学、そして実戦的な問題解決まで。
私たちの目の前には、まだまだ知らない「知る楽しさ」が無限に広がっています。
今回の発表を聞いて、数学やプログラミングに興味を持った方も多いはず。
これからも、この素晴らしいコミュニティで、新しい発見を一緒に楽しんでいきましょう!

発表スライド(PDF)

VRC競プロ部(ABC感想会)の他の発表もチェック!

日常をパズルに変えよう!VRC競プロ部で語られた「作問」の楽しさ

スマホが武器に!Androidで挑む競技プログラミングの新しい形

包除原理で解き明かす数え上げの魔法!VRC競プロ部の知恵に迫る

競プロは知のスポーツ!VRChatで語られたプログラミングの新しい楽しみ方

VRC競プロ部(ABC感想会)の開催情報・参加方法

VRC競プロ部(ABC感想会)のポスター

VRC競プロ部(ABC感想会)

開催日: 2026年07月22日

開催時間: 23:00 - 00:30

開催曜日: その他

開催周期: ABC開催日(主に土曜日・稀に日曜日)

「VRC競プロ部」は、競技プログラミング(競プロ)をしている人が交流したり情報交換をする場です。 「VRC競プロ部」では、AtCoderが開催する「AtCoder Beginner Contest」(土曜 or 日曜 21:00-22:40)が終わったあと、 当日23:00からコンテストの参加者で振り返りと解説をする「ABC感想会」を開催しています。 「競プロを楽しく継続できる場」を目…

「VRC競プロ部」は、競技プログラミング(競プロ)をしている人が交流したり情報交換をする場です。 「VRC競プロ部」では、AtCoderが開催する「AtCoder Beginner Contest」(土曜 or 日曜 21:00-22:40)が終わったあと、 当日23:00からコンテストの参加者で振り返りと解説をする「ABC感想会」を開催しています。 「競プロを楽しく継続できる場」を目指して開催しているため、参加する人の状況に合わせて話をする内容を変えていますので、 初めてコンテストに参加した方も歓迎しています! 他にも、部員内で勉強会や作問が不定期に企画され開催されています。 競プロやってる方はもちろん、興味があって初めたい方、一緒に競プロをやる仲間がほしい方の参加を歓迎しています!