[PYTHON] AtCoder Beginner Contest 172 Bewertung

Die Ergebnisse dieser Zeit

スクリーンショット 2020-06-28 12.25.30.png

Eindrücke dieser Zeit

Diesmal konnte ich mein Bestes geben, bis D. Normalerweise kann ich mich überhaupt nicht konzentrieren, aber ich kann mich während des Wettbewerbs möglicherweise immer mehr konzentrieren. Danach denke ich, dass, wenn Sie etwas mehr typische Leistung hinzufügen, der Boden stabil ist und Sie die Rate wieder erhöhen können. Ich möchte im Juli blau werden, aber ich denke, das hängt von meiner harten Arbeit und Mentalität ab.

Problem A

Wie es ist

A.py


a=int(input())
print(a*(1+a+a**2))

B-Problem

Wir werden prüfen, ob sie gleich sind. Der boolesche Wert ist 0,1, Sie können ihn also so hinzufügen, wie er ist. Ich denke, es kann einfacher geschrieben werden, indem man itertools oder map verwendet.

B.py


s=input()
t=input()
ans=0
for i in range(len(s)):
    ans+=(s[i]!=t[i])
print(ans)

C-Problem

Die Erwartung wurde zur Überzeugung. Für das C-Problem versuche ich, das Problem zu formulieren, das für den zukünftigen Wettbewerbsprofi unverzichtbar ist.

Ich mag das aktuelle C-Problem sehr, weil es eine Rezension ist, weil es einige Probleme gibt, die ich gerne vergesse. Natürlich fühle ich mich unwohl, wenn ich es fehlerhaft mache.

Wenn es bei einer gierigen Richtlinie ein Buch gibt, das Sie sofort unten lesen, ist es eine Verschwendung, sodass Sie sehen können, dass es unmöglich ist. Hier ** gibt es zwei Schreibtische A und B, also möchte ich versuchen, eine Variable zu reparieren **. Nehmen wir daher an, es hätte $ SA $ benötigt, um das $ i $ -te Buch von oben auf Schreibtisch A zu lesen. Wählen Sie dann für den Rest das Buch auf Schreibtisch B aus, das innerhalb von $ K-SA $ Minuten von oben gelesen werden kann.

Um die Informationen zu erhalten, die wiederholt angezeigt werden ** wie viele Bücher in Minuten gelesen werden können ** für $ O (1) $ **, ist die Zeit erforderlich, die zum Lesen jedes durch Eingabe empfangenen Buches benötigt wird. Die kumulative Summe ** sollte festgelegt werden, also habe ich es in der vorherigen Berechnung getan. (Außerdem ist es zu diesem Zeitpunkt einfacher zu implementieren, wenn Sie am Anfang 0 als Element hinzufügen ** 0 Bücher von oben lesen **.)

Da die Zeit, die zum Lesen eines Buches benötigt wird, immer positiv ist, wird die kumulierte Summe in einer monoton ansteigenden Spalte angezeigt, sodass Sie das Buch auswählen können, das innerhalb von $ K-SA $ Minuten oben in den Büchern auf Schreibtisch B gelesen werden kann. Kann mit einer Dichotomie durchgeführt werden. Diese Dichotomie findet den Index ** des größten Elements unter ** $ K-SA $, aber ** (Index des kleinsten Elements größer als $ K-SA $) -1 ** Da sie den gleichen Wert haben, sollte er (Index erhalten durch bisect_right) -1 sein. Wenn $ K-SA <0 $ ist, ist der erforderliche Index außerdem -1, daher muss er ausgeschlossen werden. Seien Sie also vorsichtig.

Von oben kann es mit $ O (N \ times \ log {M}) $ implementiert werden.

C.py


from itertools import accumulate
from bisect import bisect_left,bisect_right
n,m,k=map(int,input().split())
a=[0]+list(accumulate(map(int,input().split())))
b=[0]+list(accumulate(map(int,input().split())))
ans=[0]
for i in range(n+1):
    c=bisect_right(b,k-a[i])-1
    if c!=-1:
        ans.append(c+i)
print(max(ans))

D Problem

Ich bereue es, weil ich anfing, in eine etwas seltsame Richtung zu denken.

Erstens, wenn Sie alle Brüche aufzählen, wird $ O (N \ sqrt {N}) $ offensichtlich nicht rechtzeitig sein, und wenn Sie die Primzahlen mit dem Eratostenes-Sieb aufzählen, wird $ O (N \ log {N}) $ rechtzeitig für C ++ sein. Ich dachte, aber ich habe es vermieden (weil ich nicht gut darin bin, es umzusetzen).

Ich denke, dass es nicht viele Optionen gibt, wenn Sie diese beiden schneiden. Was Sie hier denken sollten, ist, dass ** ein Bruch leicht zu berücksichtigen ist, wenn man seine Vielfachen betrachtet **. Daher wurden ** Experimente in aufsteigender Reihenfolge durchgeführt. Dann können Sie die folgenden Eigenschaften erfassen.

IMG_0438.PNG

$ i $ ist ein Kandidat für einen Bruch, und der rechts ist ein Kandidat für eine Zahl, die $ i $ als Bruch hat. Um die Summe von $ K \ mal f (K) $ mit $ K = 1 $ ~ $ N $ zu ermitteln, berücksichtigen Sie die Summe der Zahlen, die auf der rechten Seite der obigen Abbildung und für jedes $ i $ auf der rechten Seite erscheinen. Ist eine Gleichheitssequenz und ihre Summe kann leicht mit $ O (1) $ berechnet werden, sodass sie für alle $ i $ berechnet und mit $ O (n) $ implementiert werden kann.

✳︎ Die Summe der Gleichheitsfolge wird berechnet aus (erster Term + letzter Term) ((letzter Term - erster Term +1) / Toleranz) / 2.

D.py


n=int(input())
ans=0
for i in range(1,n+1):
    x,y=i,(n//i)*i
    ans+=((n//i)*(x+y)//2)
print(ans)

E Problem

Ich frage mich, ob ich mich in einem anderen Artikel mit dem Kapselungsprinzip befassen und es in diesem Artikel schreiben werde. Ich habe das Problem bereits gelöst und werde es später heute aktualisieren.

F Problem

Ich konnte nicht, weil ich nur den Namen Nim kannte. Ich denke, es ist einfach, wenn du Nim kennst (ich werde es am Montag lösen).

Recommended Posts

AtCoder Anfängerwettbewerb 152 Rückblick
AtCoder Beginner Contest 160 Bewertung
AtCoder Anfängerwettbewerb 178 Bewertung
AtCoder Anfängerwettbewerb 166 Bewertung
AtCoder Anfängerwettbewerb 167 Bewertung
AtCoder Beginner Contest 164 Bewertung
AtCoder Beginner Contest 169 Bewertung
AtCoder Beginner Contest 181 Bewertung
AtCoder Beginner Contest 171 Bewertung
AtCoder Beginner Contest 180 Bewertung
AtCoder Anfängerwettbewerb 177 Rückblick
AtCoder Beginner Contest 179 Bewertung
AtCoder Beginner Contest 172 Bewertung
AtCoder Anfängerwettbewerb 176 Bewertung
AtCoder Anfängerwettbewerb 175 Bewertung
AtCoder Anfängerwettbewerb 174 Bewertung
AtCoder Beginner Contest 153 Bewertung
AtCoder Anfängerwettbewerb 156 Bewertung
AtCoder Beginner Contest 161 Bewertung
AtCoder Beginner Contest 170 Bewertung
AtCoder Beginner Contest 165 Bewertung
AtCoder Beginner Contest 173 Bewertung
AtCoder Anfängerwettbewerb 155 Bewertung
AtCoder Beginner Contest 162 Bewertung
AtCoder Anfängerwettbewerb 177
AtCoder Anfängerwettbewerb 179
AtCoder Anfängerwettbewerb 172
AtCoder Anfängerwettbewerb 180
AtCoder Anfängerwettbewerb 173
Atcoder Anfänger Wettbewerb 153
AtCoder Beginner Contest 066 Überprüfen Sie frühere Fragen
AtCoder Anfängerwettbewerb 181 Hinweis
AtCoder Grand Contest 041 Bewertung
AtCoder Regular Contest 105 Bewertung
AtCoder Anfängerwettbewerb 180 Hinweis
AtCoder Anfängerwettbewerb 182 Hinweis
AtCoder Anfängerwettbewerb 156 WriteUp
AtCoder Grand Contest 045 Bewertung
AtCoder Beginner Contest 167 Memorandum
AtCoder Anfängerwettbewerb 183 Hinweis
AtCoder Regular Contest 106 Bewertung
AtCoder Anfängerwettbewerb 184 Hinweis
AtCoder Grand Contest 046 Bewertung
AtCoder Regular Contest 104 Bewertung
AtCoder Beginner Contest 102 Rückblick auf frühere Fragen
AtCoder Beginner Contest 072 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 051 Rückblick auf frühere Fragen
AtCoder Beginner Contest 127 Rückblick auf frühere Fragen
AtCoder Beginner Contest 119 Rückblick auf frühere Fragen
AtCoder Beginner Contest 054 Rückblick auf frühere Fragen
AtCoder Beginner Contest 117 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