در کشور یوتوپیا 4×n×m خانه وجود دارد که در 2×n ردیف و 2×m ستون قرار دارند. در این کشور یک باغ وجود دارد که پر از گل است (میتوانید فرض کنید تعداد گلهای باغ بیشتر از 109 است). همچنین در باغچه هر خانه تعدادی گل وجود دارد.
در این کشور دو رسم با نامهای عشق سطری و عشق ستونی وجود دارد که به صورت زیر انجام میشود.
عشق سطری به دو صورت زیر انجام می شود:
عشق سطری به دو صورت زیر انجام می شود:
هر کدام از خانهها میتوانند تعدادی گل از باغ قرض بگیرند ولی بعداً باید به همان تعداد گل به باغ پس بدهند. هدف مردم این است که بعد از چند بار انجام مراسم در هر خانه 0 یا 1 گل قرار بگیرد و هیچ خانه به باغ بدهکار نباشد. شما باید برنامهای بنویسید تا با گرفتن اطلاعات، بهدست بیاورد آیا این کار امکانپذیر است یا خیر.
اگر این کار امکانپذیر باشد در تنها سطر خروجی YES و در غیر اینصورت NO چاپ کنید.
ورودی نمونه | خروجی نمونه |
---|---|
2 2 1 1 2 0 | YES |
2 2 2 2 2 0 | NO |
پاسخ
فرض کنید a[i][j] برابر باشد با تعداد گلهای درون خانه سطر iام و ستون jام و تابع f به صورت زیر تعریف شده باشد:
\selectlanguage{english} \[ f(i) = \left\{ \begin{array}{l l} -1 & \quad \text{if $i$ is even}\\
1 & \quad \text{if $i$ is odd}\\ \end{array} \right.
\]\\ \selectlanguage{farsi}
در این صورت مسئله برابر است با پیدا کردن اعداد طبیعی row1 تا row2×n و col1 تا col2×m به طوری که: \forall (1 \leq i \leq {2 \times n} , 1 \leq j \leq {2 \times m}) \longmapsto 0 \leq a[i][j]+row_i\times f(j)+col_j\times f(i) \leq 1
میتوان نشان داد که اگر row_1, row_2,\cdots, row_{2 \times n} و col_1, \cdots, col_{2 \times m} یک جواب برای سوال باشد، row_1+f(1)\times col_1 ، row_2+f(2)\times col_1 ، \cdots ،row_{2 \times n}+f({2 \times n})\times col_1 و 0 ، col_2+f(1)\times col_1 ، col_3+f(2)\times col_1 ، \cdots ، col_{2 \times m}+f({2 \times m}-1)\times col_1 هم یک جواب برای سوال است. پس میتوان فرض کرد که اگر یک جواب برای سوال وجود داشته باشد، جوابی برای سوال وجود دارد که در آن col_1 برابر است با 0.
چون مقدار col_1 برابر است با 0 پس مقدار row_1 یا برابر است با 1-a[1][1] یا -a[1][1]، که برای هر کدام از این حالات باید سوال را جداگانه حل کرد.
زمانی که مقدار col_1 و row_1 مشخص باشد، هر کدام از مقایر row_{2\leq i \leq 2\times n} و col_{2 \leq i \leq 2 \times m} دو حالت دارند. a[i][j] محدودیتی برای row_i و col_j قرار می دهد. مسئله به دست آمده نسبت دادن یکی از دو عدد مناسب برای متغیر هاست طوری که شرایطی که اعداد جدول تولید میکنند را برآورده کند که 2-satisfiability}{http://en.wikipedia.org/wiki/2-satisfiability}} نام دارد.
با استفاده از الگوریتم حل 2-satisfiability میتوان سوال را در زمان o(n \times m) حل کرد.