Module: روی همه زیر الگوهای یک ماسک داده شده تکرار کنید


Problem

5 /7


اریک و تابلوی LED

Theory Click to read/hide

این اتفاق می افتد که لازم است تمام دنباله های بیت با طول معین را برشماریم. یا به عبارت دیگر، روی همه گزینه های ممکن تکرار کنید، جایی که برای هر شی یکی از دو حالت ممکن انتخاب می شود.

در چنین شرایطی، امکان اجرای شمارش با استفاده از ماسک بیت وجود دارد. مزیت این روش این است که چنین کدهایی به صورت غیر بازگشتی کار می کنند و به جای مجموعه ها یا موارد مشابه بر روی اعداد عمل می کنند که عملکرد را تا حد زیادی بهبود می بخشد.

کد کلی با استفاده از بیت ماسک در زیر آورده شده است: intn; // تعداد اشیاء (طول دنباله بیت) برای (int mask = 0; mask < (1 << n); mask++) { // حلقه تمام اعداد از 0 تا 2^n - 1، که در آن هر عدد مربوط به یک بیت ماسک است // ماسک عدد فعلی یک بیت ماسک است، که در آن بیت i، وضعیت شیء i را مشخص می کند. برای (int i = 0; i < n; i++) { // روی n بیت تکرار کنید تا بفهمید هر شی چه حالتی دارد if ((1 << i) & mask) { // بررسی کنید بیت i برابر با یک است // گزینه ای را پردازش کنید که شی i-ام حالت '1' } else { // مورد زمانی که بیت i-امین صفر باشد // گزینه ای را پردازش می کند که شی i-ام حالت '0' } } }
این کد در O(2^n * f(n)) اجرا می شود، که در آن f(n) زمانی است که برای پردازش یک تکرار خاص طول می کشد.

Problem

اریک در گاراژ قدیمی پدربزرگش یک برد LED پیدا کرد. با این حال، او تعجب کرد که هنگام فعال شدن، دیودها با یکدیگر هماهنگ نشده بودند. یعنی برخی سوختند و برخی نه.
خود تخته غیرعادی بود. این یک شبکه مستطیل شکل با n ردیف و m ستون است که هر سلول شامل یک دیود است. در نزدیکی هر ردیف یک اهرم وجود دارد که تمام دیودهای این ردیف را تغییر می دهد (دیودهای سوزان خارج می شوند و بالعکس). هر ستون دارای اهرم های یکسانی است (که من از دیودهای ستون مربوطه استفاده می کنم).
اریک فکر کرد که آیا می توان دیودها را با تغییر اهرم ها به همان حالت تغییر داد؟

ورودی:
خط اول شامل دو عدد طبیعی n و m است (1 <= n، m <= 7) - به ترتیب تعداد سطرها و ستون های روی تابلو.
سپس n خط با هر عدد m وجود دارد - حالت های دیودها، جایی که 0 به معنای خاموش بودن دیود و 1 روشن بودن آن است.

خروجی:
اگر می‌توانید دیودها را به یک حالت برسانید، «بله» و اگر غیرممکن است «نه» را چاپ کنید.

مثال:
  <بدن>
ورودی خروجی
2 2
0 1
10
بله
2 2
0 1
0 0
نه

توضیح:
در مثال اول، می توانید همه دیودها را در ردیف اول تغییر دهید، سپس همه دیودها را در ستون اول تغییر دهید. سپس همه دیودها خاموش خواهند شد.