Party Food | Twil3akine.org 問題概要
N 人の参加者 p1,⋯,pN と N 個の食べ物 f1,⋯,fN がある。
各参加者 pi には苦手な食べ物の集合 Di⊆{f1,⋯,fN} が与えられている。
以下の条件を全て同時に満たす食べ方があるか判定せよ。
- 各参加者がちょうど1つの食べ物を食べる ⋯(I)
- 各食べ物はちょうど1人に食べられる ⋯(II)
- 各参加者がそれぞれの苦手な食べ物を食べない ⋯(III)
変数定義
まず、参加者と食べ物の関係について
xij={10(参加者 pi が食べ物 fj を食べる)(参加者 pi が食べ物 fj を食べない)
と定義する
各条件について
-
(I) について
全ての参加者に対して、各食べ物に関する ExactOne を満たす
-
(II) について
全ての食べ物に対して、各参加者に関する ExactOne を満たす
-
(III) について
各参加者 i に対して、∀i,⋀k∈Di(¬xik) が真となる
論理式に変形する
Exact Oneより
ExactOne=(i=1⋁Nxi)∧(i=1⋀N−1j=i+1⋀N¬(xi∧xj))
であるので、
∀k(1≤k≤N),(i=1⋁Nxki)∧(i=1⋀N−1j=i+1⋀N¬(xki∧xkj))
∀k(1≤k≤N),(i=1⋁Nxik)∧(i=1⋀N−1j=i+1⋀N¬(xik∧xjk))
∀i(1≤i≤N),k∈Di⋀(¬xik)
と表すことができる
結論
(I)∧(II)∧(III) が真となる組み合わせがあれば、条件を同時に全て満たす組み合わせがあると言うことになる。