ABC173C est beaucoup d'apprentissage et sera utile pour référence future, donc au lieu d'un mémorandum personnel.
ABC173C
import copy #Liste multidimensionnelle passant par valeur/Copie profonde(Deep Copy): copy.deepcopy()pour
h, w, k = map(int, input().split())
grd = [list(i for i in input()) for _ in range(h)]
ans = 0
for i in range(2**h): #Comment choisir une rangée 2**h rue, avec eux
grd1 = copy.deepcopy(grd) #Par valeur de grd/Copie profonde(Deep Copy)
for i1 in range(h): # 2**h rue est un chiffre h lorsqu'il est converti en nombre binaire, dont i1 chiffre
if i >> i1 & 1: # 「2**Quel chiffre est 1 lorsque i de «ies rues sur h» est converti en nombre binaire
grd1[i1] = ['r'] * w
for j in range(2**w): #Comment choisir une colonne 2**Sur w street, jth d'entre eux
grd2 = copy.deepcopy(grd1) #Passage par valeur de grd1/Copie profonde(Deep Copy)
for j1 in range(w): # 2**La rue w est le chiffre w converti en nombre binaire, dont le chiffre j1
if j >> j1 & 1: # 「2**Quel chiffre est 1 lorsque j de "jth of w rues" est converti en un nombre binaire
for n in range(h):
grd2[n][j1] = 'r'
if sum(grd2,[]).count('#') == k: # sum()Aplatir une liste bidimensionnelle à une dimension avec
ans += 1
print(ans)
Il existe divers articles sur la recherche complète de bits, mais c'est généralement difficile pour les débutants et ceux qui ne peuvent utiliser que Python. Ce qui suit est facile à comprendre pour une telle personne, et il est juste de comprendre ce qu'il faut faire en effectuant d'abord une recherche complète. Python de algorithme (recherche de bits complète)
J'avais l'intention d'écrire en utilisant list.copy ()
et list [:]
avec l'intention de détruire et de ne pas détruire des objets, mais cela n'a pas fonctionné comme prévu (dans le code ci-dessus). J'étais en difficulté (quand grd
a été réécrit involontairement).
Il existe deux types de copie: passer par référence / copie superficielle (Shallow Copy) et passer par valeur / copie profonde (Deep Copy), et la bibliothèque de copie copy.copy ()
et copy.deepcopy ()
se comportent surtout dans les listes multidimensionnelles. Est différent.
Python - Liste en double
[Python] Copie de la liste multidimensionnelle
Ceci est utile lorsque vous souhaitez agréger de manière centralisée une liste multidimensionnelle comme ce problème. Il semble y avoir plusieurs façons de le faire, mais il y a aussi une utilisation surprenante de sum ()
.
Aplatir (aplatir une liste multidimensionnelle à une dimension) avec Python
Recommended Posts