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