Pertimbangkan matriks diagonal blok biner yang memiliki blok kuadrat 1s pada diagonal utama, dan bernilai 0 di tempat lain. Sebut saja matriks seperti itu "valid".
Sebagai contoh, berikut adalah beberapa matriks 4x4 yang valid:
1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1
0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1
0 0 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1
0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1
Perhatikan bahwa cara alternatif untuk menggambarkan matriks seperti itu adalah bahwa ada rantai blok persegi 1 dari kiri atas ke kanan bawah, menyentuh sudut ke sudut, dan di mana pun yang lain adalah 0.
Sebagai kontras, berikut adalah beberapa matriks 4x4 yang tidak valid:
1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
1 0 0 1 1 0 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0
Anda akan diberikan n
oleh n
matriks biner sebagai input - berapakah jumlah minimum 0
bit yang perlu Anda atur 1
untuk mendapatkan matriks yang valid?
Anda dapat menulis fungsi atau mengambil program string nyaman, daftar atau matriks Format mewakili n
oleh n
matriks 0 dan 1 (asalkan tidak preprocessed). Baris harus dipisahkan dengan jelas dalam beberapa cara, jadi format seperti array bit 1D tidak diperbolehkan.
Ini adalah kode-golf , jadi tujuannya adalah untuk meminimalkan jumlah byte dalam program Anda.
Contohnya
Misalnya, jika inputnya adalah
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
maka jawabannya adalah 5, karena Anda dapat mengatur lima 0
bit 1
untuk mendapatkan:
1 0 0 0 0
0 1 1 0 0
0 1 1 0 0
0 0 0 1 0
0 0 0 0 1
dan ini adalah angka minimum yang diperlukan. Namun, jika input tadi
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
maka jawabannya adalah 24, karena satu-satunya matriks 5x5 yang valid di mana kanan-atas 1
adalah matriks semua 1
s.
Uji kasus
Tes diwakili di sini sebagai array 2D bilangan bulat.
[[0]] -> 1
[[1]] -> 0
[[0,1],[0,0]] -> 3
[[1,0],[0,0]] -> 1
[[0,0,0],[0,1,0],[0,0,0]] -> 2
[[0,1,0],[0,0,0],[0,1,0]] -> 7
[[0,1,0],[1,0,0],[0,0,1]] -> 2
[[1,1,1],[1,1,1],[1,1,1]] -> 0
[[0,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,0]] -> 4
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]] -> 8
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,1,0]] -> 14
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,1,0,0]] -> 14
[[0,0,0,0,0],[0,0,0,0,0],[0,1,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 7
[[0,0,0,0,0],[0,0,0,0,0],[1,0,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 11
[[0,0,0,0,0],[0,0,1,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,1]] -> 5
[[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 24
[[0,0,0,1,0],[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 23
[[0,1,0,0,0],[1,0,0,0,0],[0,0,1,0,0],[0,0,0,0,1],[0,0,0,1,0]] -> 4
[[0,1,1,1,0],[0,1,1,0,1],[0,1,1,1,0],[0,1,0,0,1],[0,0,0,0,0]] -> 14
Catatan
- Tantangan terkait: Cetak Matriks Blok-Diagonal
- Inspirasi: Freedom Factory, Google Code Jam 2016 Problem 2D
sumber