Ich habe zum ersten Mal am AtCoder-Wettbewerb teilgenommen. Ich habe die letzten Fragen nur ein wenig gelöst. Ich bin wirklich ein Anfänger, aber ich denke, C ist so einfach und D kann verwendet werden. Ich dachte, also habe ich es gelöst. Es hat nicht rechtzeitig funktioniert. Die Antwort eines programmierstarken Mannes (Tsuyobito) ist für Anfänger zu klug. e? Gibt es eine Möglichkeit, solche Eingaben zu erhalten? !! Ist es eine Ameise, wie man es ausgibt? !! Es wird so sein. Ich werde mich widmen. Vorerst möchte ich darüber nachdenken, warum der Algorithmus, den ich fand, nicht gut war. Es macht keinen Sinn, wenn Sie die Operationen, die Sie als Code betrachten, nicht aufschreiben können. Das Problem stammt aus dem D-Problem von ABC148. Hier ist ein Zitat (ich werde die Regeln befolgen, aber bitte lassen Sie mich wissen, wenn es falsch ist).
(Ergänzung, die keine Rolle spielt) Ich habe noch kein Ameisenbuch gekauft. Weil ich einen kleinen Geldbetrag habe. Wenn es in der Schulbibliothek ist, kann ich es für die Jahresend- und Neujahrsferien mieten. Ich dachte, ich wollte, dass er es kauft, aber ich habe einen Fehler in der Richtung gemacht, also war ich zu Hause. ・ Algorithmus Lehrbuch-Grundlagen und Anwendungen von Algorithmen in praktischen Programmen gezeigt- ・ Algorithmus-Puzzle-Einführung in mathematische Puzzles für Programmierer- Ich wollte mir dieses Buch leihen und zuerst den Algorithmus lernen, also fand ich es okay. Das frühere Buch ist älter als ich ...
D - Brick Break
N Steine sind in einer horizontalen Reihe aufgereiht. Die ganze Zahl a i </ sub> wird von links auf den i (1 ≤ i ≤ N) -ten Stein geschrieben. Sie können jeden Stein aus N-1 oder weniger auswählen und zerkleinern. Infolgedessen bleiben K Steine übrig. Zu diesem Zeitpunkt ist Herr Sunuke für jede ganze Zahl i (1 ≤ i ≤ K) zufrieden, wenn die ganze Zahl, die in der i-ten von links unter den verbleibenden Steinen geschrieben ist, i ist. Bitte geben Sie die Mindestanzahl an Steinen aus, die Herr Sunuke zerdrücken muss, um zufrieden zu sein. Wenn dies nicht möglich ist, egal wie Sie es zerdrücken, drucken Sie stattdessen -1.
(1) Es scheint, dass die Zahlen in der Reihenfolge von 1 bleiben sollten. ② Dann sollte ich es mit dem Index von vorne überprüfen und den anderen löschen [^ 1] Wie entscheiden Sie sich für eine richtige Nomenklatur? Und was war das Element der Metapher und warum? Eine solche. [^ 1]: Dies ist ein Fehler. Sie müssen es nur zählen. Was an erster Stelle benötigt wird, ist nicht die endgültige Folge von Zahlen. Lesen Sie das Problem richtig
n = int(input())
a = list(map(int, input().split()))
ans = 0
i = 0
while i + 1 <= len(a):
#index+Löschen, wenn 1 vom Listenelement abweicht
if a[i] != i + 1:
del a[i]
#Wenn sie identisch sind, überprüfen Sie das nächste Element
else:
i += 1
#Unmöglich, wenn Sie alles löschen
if len(a) == 0:
print(-1)
#Wenn Sie die verbleibenden Elemente subtrahieren, ist dies die Zahl, die Sie gebrochen haben
else:
print(n - len(a))
In einigen Testfällen zu TLE. Hmmm, ich habe eine Weile darüber nachgedacht, aber ich weiß nicht, was los ist ... Ich bin nicht sicher, ob es definitiv richtig ist. Ist es nicht TLE in einer Endlosschleife, aber die Zeit ist vorbei, wenn der Testfall zu lang ist? Ich verstehe nicht ganz, wie das funktioniert. Danach machte ich mir Sorgen, es auf dem Weg zu brechen, aber es war überhaupt nicht wichtig, also ließ ich es weg.
③ Es war vielleicht nicht gut, weil ich sie einzeln gelöscht habe. Sie können alles auf einmal löschen. Damit,
n = int(input())
a = list(map(int, input().split()))
ans = 0
i = 0
while i + 1 <= len(a):
#index+Wenn sich 1 vom Listenelement unterscheidet
if a[i] != i + 1:
#Überprüfen Sie, ob das richtige Element vorhanden ist
if i + 1 in a:
#Vor dem richtigen Element löschen
del a[i:a.index(i + 1)]
#Löschen Sie alle, wenn kein korrektes Element vorhanden ist
else:
del a[i:]
#index+Wenn 1 mit dem Element in der Liste identisch ist, fahren Sie mit dem nächsten Element fort
else:
i += 1
#Unmöglich, wenn Sie alles löschen
if len(a) == 0:
print(-1)
#Wenn Sie die verbleibenden Elemente subtrahieren, ist dies die Zahl, die Sie gebrochen haben
else:
print(n - len(a))
Es spielt überhaupt keine Rolle, aber Sie können es separat lesen. ~~ Es sieht aus wie ein Verrückter. ~~ [^ 2]
――Der kürzeste Code im Moment, ich habe geweint, weil ich die Bedeutung überhaupt nicht verstanden habe [^ 3] [^ 4]
Aus irgendeinem Grund habe ich versucht, eine saubere Linie von Ziegeln zu finden, aber es scheint, als müsste ich nur die Anzahl der sauber ausgekleideten Steine zählen.
Es scheint, dass Sie if- und else-Anweisungen in eine Zeile schreiben können.
(Wenn true, geben Sie dies zurück) if (unter dieser Bedingung) else (Wenn false, ist dies der Fall)
So was. Ich brauche nicht einmal einen Doppelpunkt. Es ist bequem. Also die letzten 4 Zeilen
print(-1 if len(a) == 0 else n - len(a))
Das ist gut. Aha! Lernen. [^ 2]: Compla [^ 3]: Übertriebener Ausdruck [^ 4]: Es ist momentan nicht das Ziel, den stärksten Code zu schreiben. Es ist wichtig, das Problem so weit wie möglich zu lösen. Machen Sie sich also keine Sorgen.
Recommended Posts