Rückblick auf den AtCoder Beginner Contest 161 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 den Kommentar und die Beiträge anderer Leute betrachte. Es ist möglicherweise nicht das, was Sie tatsächlich eingereicht haben.

A - ABC Swap

Es ist ein Problem, den Inhalt der drei Boxen durch eine feste Operation zu ersetzen. Da die Position der Swap-Operation von Anfang an festgelegt ist, ändern Sie einfach die Reihenfolge von x, y, z in z, x, y und Ausgabe.

x, y, z = map(int, input().split())
print(z, x, y)

B - Popular Vote

Es ist ein Problem herauszufinden, ob es M oder mehr Produkte gibt, die eine bestimmte Anzahl von Stimmen unter N Produkttypen erhalten haben.

Wir haben die Anzahl der abgegebenen Stimmen sortiert und geprüft, ob das M-te Produkt die Bedingungen erfüllt. Ich ging daran vorbei.

N, M = map(int, input().split())
A = list(map(int, input().split()))
A.sort(reverse = True)
if A[M-1] >= sum(A) / (4 * M):
  print('Yes')
else: print('No')

C - Replacing Integer Die Frage ist zu beantworten, wie hoch der Mindestwert sein wird, wenn Sie K weiterhin von dem angegebenen N abziehen.

Die letzte verbleibende Zahl nach Subtraktion von der angegebenen Zahl ... entspricht der Berechnung zur Ermittlung des Überschussbegriffs. Wenn Sie noch einen subtrahieren, ist dies der Wert, der durch Subtrahieren von K vom Überschussterm (Minus) erhalten wird.

Ich habe es mit dem folgenden Code implementiert.

N, K = map(int, input().split())
print(min(N%K, K-N%K))

D - Lunlun Number

Es ist ein Problem, die K-te Zahl zu finden, die die Bedingung der Anzahl der Durchläufe erfüllt.

Auf den ersten Blick scheinen die Bedingungen einfach zu sein, aber ich habe aufgegeben, weil ich nicht wusste, wie ich die K-te Zahl effizient finden kann.

Ich habe den Kommentar gesehen. In diesem Problem können Sie es mit hoher Geschwindigkeit finden, indem Sie am rechten Ende der einmal verwendeten Nummer eine Zahl hinzufügen, die eine andere Bedingung erfüllt. Der Kommentar verwendete dazu Warteschlangen.

Stellen Sie zuerst eine Zahl von 1 bis 9 in die Warteschlange. Nehmen Sie das linke Ende heraus und setzen Sie den Wert auf $ x $. Sei $ r $ die Einerstelle von $ x $. Wenn $ r $ "0" ist, berechnen Sie $ 10x und 10x + 1 $ und stellen Sie sie erneut in die Warteschlange. In ähnlicher Weise wird, wenn $ r $ "1 ~ 8" ist, $ 10x + (r-1), 10x + r, 10x + (r + 1) $, wenn r "9" ist, $ 10x - 1, 10x $ berechnet und erneut In die Warteschlange.

Durch Wiederholen ist der zum k-ten Zeitpunkt herausgenommene Wert die zu erhaltende Zahl.

Ich habe versucht, es so zu implementieren, wie es ist.

K = int(input())
Q = [i for i in range(1, 10)]
for _ in range(K):
  x = Q.pop(0)
  r = x%10
  if r != 0: Q.append(x*10 + r - 1)
  Q.append(x*10 + r)
  if r != 9: Q.append(x*10 + r + 1)
print(x)

Das ist TLE. Die Geschwindigkeit von pop () scheint langsam zu sein. Ich glaube nicht, dass ich es herausnehmen muss, also werde ich es als Array behalten und es mit for drehen.

K = int(input())
Q = [i for i in range(1, 10)]
k = 0
for q in Q:
  if k >= K:
    break
  r = q%10
  if r != 0:
    Q.append(q*10 + r - 1)
    k += 1
  Q.append(q*10 + r)
  k += 1
  if r != 9:
    Q.append(q*10 + r + 1)
    k += 1
print(Q[K-1])

Ich ging daran vorbei.

Nachtrag

Ich wurde in den Kommentaren darauf hingewiesen. Verwenden Sie die Bibliothek ordnungsgemäß, wenn Sie mit Warteschlangen umgehen.

In Python können Sie Warteschlangen mithilfe der Klasse "collection.deque ()" verarbeiten. Es gibt Funktionen wie "append ()", "appendleft ()", "pop ()", "popleft ()".

import collections

K = int(input())
Q = collections.deque([i for i in range(1, 10)])
for _ in range(K):
  x = Q.popleft()
  r = x%10
  if r != 0: Q.append(x*10 + r - 1)
  Q.append(x*10 + r)
  if r != 9: Q.append(x*10 + r + 1)
print(x)

E - Yutori

Wenn Sie entscheiden, welche Arbeitstage und welche Arbeitstage nach bestimmten Regeln arbeiten sollen, ist es eine Frage, immer zu beantworten, an welchem Arbeitstag.

Ich gab auf und sah den Kommentar.

Wenn Sie sich die Anzahl der Tage leisten können, an denen Sie arbeiten können, oder wenn Sie nicht genügend Tage haben, sind Sie zunächst bedingungslos unterwegs.

Betrachten wir also den Fall, in dem die Anzahl der Arbeitstage bis zur letzten Minute gefüllt ist. Erstellen Sie zunächst ein Array R, das die Tage zählt, an denen Sie vom rechten Ende aus in der richtigen Reihenfolge arbeiten können. Dieses Array enthält die Information "Der $ x $ -te Arbeitstag liegt vor $ R [x] $". In ähnlicher Weise ist im Fall des Arrays L, das die Arbeitstage in der Reihenfolge vom linken Ende aus zählt, die Information enthalten, dass "der Arbeitstag $ x $ nach $ L [x] $ liegt". Daher kann gesagt werden, dass der Arbeitstag immer dann ist, wenn $ L [x] $ und $ R [x] $ übereinstimmen.

Der folgende Code implementiert dies. Ich ging daran vorbei.

N, K, C = map(int, input().split())
S = input()

L = []
R = []
holiday = 0

for i in range(N):
  if holiday:
    holiday -= 1
  elif S[i] == 'o':
    L.append(i)
    holiday = C
holiday = 0
for i in range(N-1, -1, -1):
  if holiday:
    holiday -= 1
  elif S[i] == 'o':
    R.append(i)
    holiday = C
R = R[::-1]
if len(L) == K:
  for l, r in zip(L, R):
    if l == r: print(l+1)

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 161 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