Rückblick auf den AtCoder Beginner Contest 155 bis Frage E (Python)

Dies ist ein Übersichtsartikel für Anfänger von Wettkampfprofis.

Die Lösung, die ich hier schreibe, wird geschrieben, während ich mir den Kommentar und die Beiträge anderer Leute ansehe. Es ist möglicherweise nicht das, was Sie tatsächlich eingereicht haben.

A - Poor

Die Frage ist zu beantworten, ob es zwei gleiche Zahlen aus den drei angegebenen Zahlen gibt.

Sie können sie einfach vergleichen. Dieses Problem kann so umformuliert werden, dass gefragt wird: "Gibt es zwei Arten von Elementen?". Lassen Sie uns das untersuchen. Es erscheint zweckmäßig, ein Objekt vom Typ "set" zu verwenden, um doppelte Elemente in einem Array zu entfernen.

A = list(map(int, input().split()))
if len(set(A)) == 2:
  print('Yes')
else: print('No')

B - Papers, Please

Die Frage ist herauszufinden, ob die Elemente eines bestimmten Arrays die Bedingung erfüllen, dass "wenn gerade, ist es durch 3 oder 5 teilbar".

Untersuchen Sie alle Elemente und lehnen Sie ab, wenn sie gerade, aber nicht teilbar sind.

N = int(input())
A = list(map(int, input().split()))

for a in A:
  if a%2 == 0 and not (a%3 == 0 or a%5 == 0):
    print('DENIED')
    break
else:
  print('APPROVED')

C - Poll

Da mehrere Zeichenfolgen angegeben sind, ist es ein Problem, die Zeichenfolge mit der höchsten Anzahl von Vorkommen auszugeben (wenn die Anzahl gleich ist, alle in Wörterbuchreihenfolge).

Speichern Sie die Zeichenfolge in einem Array. Aggregieren Sie mit collection.Counter. Nehmen Sie den Maximalwert mit max () und fügen Sie nur die Zeichenfolge mit der maximalen Anzahl von Vorkommen in ein Array ein. Ich habe dies mit sorted () neu arrangiert und ausgegeben.

import collections
N = int(input())
S = [input() for _ in range(N)]
count = collections.Counter(S)
maxV = max(count.values())
c = [k for k, v in count.items() if v == maxV]
print('\n'.join(sorted(c)))

D - Pairs

Die Frage ist, was der K-te kleinste Wert ist, wenn alle Produkte von Paaren aus einem bestimmten Array bestellt werden.

Ich weiß es nicht. Ich gab auf. Siehe andere Antworten.

Der folgende Code wurde geschrieben, um Ihnen das Verständnis zu erleichtern. Er bezieht sich auf die meisten anderen Antworten. Ich habe so viel wie möglich in den Kommentaren erklärt, aber ehrlich gesagt gibt es viele Teile, die ich nicht gut verstehe. Ich bin mir nicht sicher, ob der Kommentar korrekt ist (insbesondere der Teil mit?).

import numpy as np
N, K = map(int, input().split())
A = np.array(list(map(int, input().split())))
A = np.sort(A)

G = A[A > 0]
Z = A[A == 0]
L = A[A < 0]

l, r = 10**18, -10**18

while l-r > 1:
  #Überprüfen Sie "die Anzahl der Paare, deren Produkt m oder weniger ist".
  m = (l+r) // 2

  # A[A > 0]Anzahl der Elemente, die die Bedingungen erfüllen?
  Pk = np.searchsorted(A, m//G, side="right").sum()

  # A[A < 0]Anzahl der Elemente, die die Bedingungen erfüllen?
  Nk = (N - np.searchsorted(A, (-m-1)//(-L), side="right")).sum()

  # A[0]Anzahl der Elemente, die die Bedingungen erfüllen?
  Zk = 0
  if m >= 0:
    Zk += len(Z) * N

  #Das Produkt derselben Elemente kann nicht ausgewählt werden. Reduzieren Sie es daher, wenn die Bedingungen erfüllt sind.
  duplicate = np.count_nonzero(A*A <= m)

  #Passen Sie die Anzahl der Elemente an, die die Bedingungen erfüllen
  k = Pk + Nk + Zk - duplicate
  
  #Alle Elemente werden verdoppelt. Entfernen Sie doppelte Elemente
  k //= 2

  #Wenn die Anzahl der Elemente k, die die Bedingung erfüllen, K oder mehr ist, wird m verringert, und wenn sie kleiner als K ist, wird m angehoben.
  if k >= K:
    l = m
  else:
    r = m
#Wenn l und r übereinstimmen, wird m eindeutig bestimmt
print(l)

Ich ging daran vorbei.

Ich verstehe den folgenden Teil überhaupt nicht. Ich habe mich gefragt, warum ich die Nummer finden kann, die die Bedingungen erfüllt, aber ich habe aufgegeben.

  # A[A > 0]Anzahl der Elemente, die die Bedingungen erfüllen?
  Pk = np.searchsorted(A, m//G, side="right").sum()

  # A[A < 0]Anzahl der Elemente, die die Bedingungen erfüllen?
  Nk = (N - np.searchsorted(A, (-m-1)//(-L), side="right")).sum()

E - Payment

Es ist ein Problem, darüber nachzudenken, wie das Geld zu zahlen ist, damit die "Summe der auszugebenden Blätter und der Anzahl der Änderungen" am geringsten ist. Es gibt jedoch nur $ 10 ^ n $ Rechnungen für Bargeld auf dieser Welt.

Zählen wir von unten. Wenn die Anzahl der zu zahlenden Blätter 5 oder weniger beträgt, ist es effizienter, so wie es ist zu zahlen, und wenn es 6 oder mehr sind, ist es effizienter, zur nächsten Ziffer aufzusteigen und die Änderung zu erhalten.

Schlechter Typ.py


N = list(map(int, input()))
N = N[::-1] + [0]

count = 0

for i, n in enumerate(N):
  if n <= 5:
    count += n
  elif n > 5:
    count += 10 - n
    N[i+1] += 1
    
print(count)

Das ist WA. Mit dem obigen Code gibt es einige Auslassungen. Wenn Sie beispielsweise 95 Yen bezahlen möchten, ist es effizienter, 100 Yen zu zahlen und das Wechselgeld zu erhalten (insgesamt 6 Karten). Bei dieser Rate habe ich $ 105 $ für insgesamt 7 Karten bezahlt.

Die Bedingung verzweigt sich erst weiter, wenn 5 ausgegeben wird. Wenn die nächste Ziffer 5 oder mehr ist, können Sie die Änderung um eins reduzieren, indem Sie nach oben gehen.

Derjenige, der bestanden hat.py


N = list(map(int, input()))
N = N[::-1] + [0]

count = 0

for i, n in enumerate(N):
  if n < 5:
    count += n
  elif n > 5:
    count += 10 - n
    N[i+1] += 1
  elif n == 5:
    if N[i+1] >= 5:
      N[i+1] += 1
    count += 5
    
print(count)

Bei der Erklärung war die Lösung anders.

Wir werden die Anzahl der Blätter in der Reihenfolge von oben überprüfen. Sie können den Übertrag berechnen, indem Sie nach dem Geldbetrag fragen, "wenn Sie genau bezahlen" und "wenn Sie noch einen bezahlen".

Ich werde nach der Erklärung schreiben.py


N = list(map(int, input()))

m = 0 #Mindestanzahl von Blättern
m_ = 1 #Sichern Sie die Anzahl der Blätter zum Zeitpunkt der Übertragung und denken Sie immer, dass n noch eins ist

for n in N:
  m, m_ = min(m + n, m_ + 10-n), min(m + (n+1), m_ + 10-(n+1))
print(m)

Wie einfach ist es zu schreiben?

Das ist alles für diesen Artikel.

Recommended Posts

Rückblick auf den AtCoder Beginner Contest 159 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 164 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 162 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 154 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 153 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 160 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 167 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 157 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 155 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 156 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 166 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 165 bis Frage E (Python)
atcoder Review des Panasonic Programming Contest 2020, bis zu Frage E (Python)
Überprüfung des Atcoders ABC158 bis Frage E (Python)
AtCoder Beginner Contest 072 Rückblick auf frühere Fragen
AtCoder Beginner Contest 085 Rückblick auf frühere Fragen
AtCoder Beginner Contest 062 Rückblick auf frühere Fragen
AtCoder Beginner Contest 113 Rückblick auf frühere Fragen
AtCoder Beginner Contest 074 Rückblick auf frühere Fragen
AtCoder Beginner Contest 127 Rückblick auf frühere Fragen
AtCoder Beginner Contest 151 Rückblick auf frühere Fragen
AtCoder Beginner Contest 075 Rückblick auf frühere Fragen
AtCoder Beginner Contest 054 Rückblick auf frühere Fragen
AtCoder Beginner Contest 110 Rückblick auf frühere Fragen
AtCoder Beginner Contest 117 Rückblick auf frühere Fragen
AtCoder Beginner Contest 070 Rückblick auf frühere Fragen
AtCoder Beginner Contest 105 Rückblick auf frühere Fragen
AtCoder Beginner Contest 112 Rückblick auf frühere Fragen
AtCoder Beginner Contest 076 Rückblick auf frühere Fragen
AtCoder Beginner Contest 089 Rückblick auf frühere Fragen
AtCoder Beginner Contest 069 Rückblick auf frühere Fragen
AtCoder Beginner Contest 079 Rückblick auf frühere Fragen
AtCoder Beginner Contest 056 Rückblick auf frühere Fragen
AtCoder Beginner Contest 087 Rückblick auf frühere Fragen
AtCoder Beginner Contest 067 Rückblick auf frühere Fragen
AtCoder Beginner Contest 093 Rückblick auf frühere Fragen
AtCoder Beginner Contest 123 Überprüfung früherer Fragen
AtCoder Beginner Contest 078 Rückblick auf frühere Fragen
AtCoder Beginner Contest 081 Rückblick auf frühere Fragen
AtCoder Beginner Contest 047 Rückblick auf frühere Fragen
AtCoder Beginner Contest 060 Rückblick auf frühere Fragen
AtCoder Beginner Contest 104 Rückblick auf frühere Fragen
AtCoder Beginner Contest 121 Rückblick auf frühere Fragen
AtCoder Beginner Contest 126 Rückblick auf frühere Fragen
AtCoder Beginner Contest 090 Rückblick auf frühere Fragen
AtCoder Beginner Contest 103 Rückblick auf frühere Fragen
AtCoder Beginner Contest 061 Rückblick auf frühere Fragen
AtCoder Beginner Contest 059 Rückblick auf frühere Fragen
AtCoder Beginner Contest 044 Rückblick auf frühere Fragen
AtCoder Beginner Contest 083 Rückblick auf frühere Fragen
AtCoder Beginner Contest 048 Rückblick auf frühere Fragen
AtCoder Beginner Contest 124 Rückblick auf frühere Fragen
AtCoder Beginner Contest 116 Rückblick auf frühere Fragen
AtCoder Beginner Contest 097 Rückblick auf frühere Fragen
AtCoder Beginner Contest 088 Rückblick auf frühere Fragen
AtCoder Beginner Contest 092 Rückblick auf frühere Fragen
AtCoder Beginner Contest 099 Rückblick auf frühere Fragen
AtCoder Beginner Contest 065 Rückblick auf frühere Fragen
AtCoder Beginner Contest 053 Rückblick auf frühere Fragen
AtCoder Beginner Contest 063 Rückblick auf frühere Fragen
AtCoder Beginner Contest 107 Rückblick auf frühere Fragen