Module: Ulangi semua subcorak topeng yang diberikan


Problem

5 /7


Eric dan Lembaga LED

Theory Click to read/hide

Ia berlaku bahawa adalah perlu untuk menghitung semua jujukan bit dengan panjang tertentu. Atau dengan kata lain, ulangi semua pilihan yang mungkin, di mana untuk setiap objek satu daripada dua keadaan yang mungkin dipilih.

Dalam situasi sedemikian, adalah mungkin untuk melaksanakan penghitungan menggunakan topeng bit. Kelebihan pendekatan ini ialah kod sedemikian berfungsi secara bukan rekursif dan beroperasi pada nombor dan bukannya koleksi atau sebagainya, yang sangat meningkatkan prestasi.

Kod umum menggunakan bitmasks diberikan di bawah: intn; // bilangan objek (panjang jujukan bit) untuk (int mask = 0; mask < (1 << n); mask++) { // gelung melalui semua nombor dari 0 hingga 2^n - 1, di mana setiap nombor sepadan dengan bitmask // topeng nombor semasa ialah bitmask, di mana bit ke-i menentukan keadaan objek ke-i for (int i = 0; i < n; i++) { // berulang ke atas n bit untuk memahami keadaan setiap objek if ((1 << i) & mask) { // semak sama ada bit ke-i sama dengan satu // memproses pilihan bahawa objek ke-i mempunyai keadaan '1' } else { // kes apabila bit ke-i ialah sifar // memproses pilihan bahawa objek ke-i bagi keadaan '0' } } }
Kod ini dijalankan dalam O(2^n * f(n)), dengan f(n) ialah masa yang anda perlukan untuk memproses satu lelaran tertentu.

Problem

Eric menemui papan LED di garaj lama datuknya. Bagaimanapun, dia terkejut apabila diaktifkan, diod tidak disegerakkan antara satu sama lain. Iaitu, sebahagian daripadanya terbakar, dan ada yang tidak.
Papan itu sendiri ternyata tidak biasa. Ia adalah grid segi empat tepat dengan n baris dan m lajur, di mana setiap sel mengandungi satu diod. Berhampiran setiap baris terdapat tuil yang menukar semua diod dalam baris ini (diod terbakar keluar dan sebaliknya). Setiap lajur mempunyai tuas yang sama (yang saya gunakan diod dalam lajur yang sepadan).
Eric tertanya-tanya sama ada boleh menukar diod kepada keadaan yang sama dengan menukar tuas.

Input:
Baris pertama mengandungi dua nombor asli n dan m (1 <= n, m <= 7) - bilangan baris dan lajur pada papan, masing-masing.
Kemudian terdapat n baris dengan nombor m setiap satu - keadaan diod, dengan 0 bermakna diod dimatikan, dan 1 diod dihidupkan.

Output:
Cetak "YA" jika boleh membawa diod ke dalam satu keadaan dan "TIDAK" jika mustahil.

Contoh:
 
Penjelasan:
Dalam contoh pertama, anda boleh menukar semua diod dalam baris pertama, kemudian menukar semua diod dalam lajur pertama. Kemudian semua diod akan dimatikan.
 
Input Output
2 2
0 1
10
YA
2 2
0 1
0 0
TIDAK