Ich werde E - Bomber ausführen, das ich gestern in ABC nicht lösen konnte.
E - Bomber Das Raster in einem zweidimensionalen Array zu halten ist umständlich und zeitaufwändig. Verwalten Sie daher die Anzahl der Bomben auf jeder der $ H- und W $ -Achsen. Wenn Sie die maximale Anzahl jeder Bombe auf den Achsen $ H und W $ auswählen und die Summe der Maximalwerte zurückgeben, scheint die Antwort korrekt zu sein, aber das reicht nicht aus. Dies liegt daran, dass es nicht möglich ist, den Fall zu behandeln, in dem sich an der Kreuzung eine Bombe befindet. Wenn sich an den Kreuzungen Bomben befinden, beträgt die Summe ihrer Höchstwerte -1.
Halten Sie die Schnittpunkte, indem Sie ein Tupel in das Diktat einfügen. 0 ist der Punkt, an dem es keine Bombe gibt, 1 ist der Punkt, an dem es eine Bombe gibt.
from collections import defaultdict
h, w, m = map(int, input().split())
cnt_h = [0] * h
cnt_w = [0] * w
dic = defaultdict(int)
for _ in range(m):
h_m, w_m = map(int, input().split())
cnt_h[h_m - 1] += 1
cnt_w[w_m - 1] += 1
dic[(h_m - 1, w_m - 1)] += 1
max_h = max(cnt_h)
max_w = max(cnt_w)
mh = []
mw = []
for i in range(h):
if max_h == cnt_h[i]:
mh.append(i)
for i in range(w):
if max_w == cnt_w[i]:
mw.append(i)
flag = False
for i in mh:
for j in mw:
if dic[(i, j)] == 0:
flag = True #Wenn es einen Punkt von 0 gibt, ist dies der Maximalwert. Brechen Sie ihn also ab.
break
if flag:
break
if flag:
print(max_h + max_w)
else:
print(max_h + max_w - 1)
Recommended Posts