[PYTHON] AtCoderBeginnerContest168 Review & Summary (erste Hälfte)

AtCoder ABC168 Dies ist eine Zusammenfassung der Probleme des AtCoder-Anfängerwettbewerbs 168, der am 17.05.2020 (So) in der Reihenfolge von Problem A unter Berücksichtigung der Berücksichtigung stattfand. Das erste Halbjahr befasst sich mit Fragen bis ABC. Das Problem wird zitiert, aber bitte überprüfen Sie die Wettbewerbsseite für Details. Klicken Sie hier für die Wettbewerbsseite Offizieller Kommentar PDF

Problem A ∴ (daher)

Problemstellung Iroha beschloss, Japanisch für ihre Katze Sunuke zu unterrichten, die das beliebte japanische Spiel "Åt Coder" spielen möchte. Beim Zählen von Stiften auf Japanisch wird "Buch" nach der Nummer als Hilfsnummer hinzugefügt. Diese Hilfsnummer wird je nach angehängter Nummer unterschiedlich gelesen. Insbesondere für eine positive ganze Zahl $ N $ unter 999 $ ist das Lesen von "Buch", wenn "$ N $ Buch" gesagt wird ・ Wenn $ 1 $ von $ N $ $ 2,4,5,7,9 $ ist, "hon" ・ Wenn $ 1 $ von $ N $ $ 0,1,6,8 $ ist, wird "pon" ・ "Bon", wenn der $ 1 $ Platz von $ N $ $ 3 $ ist . $ N $ ist angegeben, geben Sie also das Lesen des "Buches" aus, wenn Sie "$ N $ Buch" sagen.

Die Eingabe wird als Zahl empfangen, und der Rest nach Division durch 10 $ liegt in der Größenordnung von 1 $. Ich denke, es ist ein Fehler, aber um ihn so schnell wie möglich einzureichen, setze ich die Ausgabe von "hon" auf "else" (das Schreiben des bedingten Ausdrucks wird etwas kürzer).

abc168a.py


n = int(input())
k = n % 10
if k == 3:
    print("bon")
elif k == 0 or k == 1 or k == 6 or k == 8:
    print("pon")
else:
    print("hon")

Problem B ... (dreifache Punkte)

Problemstellung Es gibt eine Zeichenfolge $ S $, die aus Kleinbuchstaben besteht. Wenn die Länge von $ S $ kleiner als $ K $ ist, geben Sie $ S $ so aus, wie sie ist. Wenn die Länge von $ S $ länger als $ K $ ist, schneiden Sie nur das erste $ K $ -Zeichen aus und fügen Sie am Ende ... zur Ausgabe hinzu.

Vergleichen Sie vorerst die Länge von $ S $ mit $ K $ in der if-Anweisung und schreiben Sie die Verarbeitung, wenn sie das Folgende und das Ende überschreitet. Da Python Zeichenfolgen wie ein Array verarbeiten kann, habe ich es ohne Verwendung der for-Anweisung geschrieben.

abc168b.py


n = int(input())
s = input()
if len(s) <= n:
    print(s)
else:
    print(s[:n] + "...")

Problem B wurde in wenigen Minuten nach Beginn des Wettbewerbs gelöst, sodass ich es in meiner idealen Zeit lösen konnte.

C Problem: (Doppelpunkt)

Problemstellung Betrachten Sie eine analoge Uhr mit Stunden- und Minutenzeigern von $ A $ Zentimeter bzw. $ B $ Zentimeter. Jeweils ein Endpunkt des Stundenzeigers und des Minutenzeigers ist auf denselben Festpunkt festgelegt, und jeder Zeiger dreht sich mit einer konstanten Winkelgeschwindigkeit im Uhrzeigersinn um diesen Punkt. Der Stundenzeiger ist $ 12 $ Stunde und der Minutenzeiger ist $ 1 $ Stunde. Bei $ 0 $ überlappen sich die Stunden- und Minutenzeiger. Wie viele Zentimeter sind die nicht fixierten Endpunkte der $ 2 $ -Hände voneinander entfernt, wenn sie nur $ H $ Stunden und $ M $ Minuten erreichen?

Ich habe mir ein paar Möglichkeiten ausgedacht, um es zu lösen, aber ich habe es mit dem Kosinussatz gelöst. Der Wert $ D $, den Sie finden möchten, ist

D = \sqrt{A^2 + B^2 - 2AB\cos \theta}

Da es mit berechnet werden kann, kann es durch Berechnen von $ \ theta $ gelöst werden. Wenn die Winkel der Stunden- und Minutenzeiger von 0 Uhr bis zu den Zeigern im Uhrzeigersinn $ \ theta_A bzw. \ theta_B $ sind.

\theta_A = 30 \times H + 0.5 \times M \\
\theta_B = 6 \times M

Daher ist der Winkel $ \ theta $, der durch die Stunden- und Minutenzeiger gebildet wird

\theta = \theta_A - \theta_B

Sie können es mit finden. Hier ist es möglich, dass $ \ theta $ größer als $ 180 $ Grad oder negativ ist.

\cos (360 - x) = \cos x \\
\cos (-x) = \cos x

Daher kann die Länge problemlos durch Berechnung des Kosinussatzes berechnet werden.

abc168c.py


import math
a, b, h, m = map(int, input().split())
x = 30 * h + m / 2 - 6 * m
d = math.sqrt(a**2 + b**2 - 2 * a * b * math.cos(math.radians(x)))
print(d)

Eine andere Sache, die ich mir ausgedacht habe, war $ (A_x, A_y) = (A \ cos \ theta_1, A \ sin \ theta_1), (B_x, B_y) = (B \ cos \ theta_2, B) \ sin \ theta_2) $ und $ D $, die unter Verwendung des Drei-Quadrat-Theorems erhalten werden sollen, sind

D = \sqrt{(A_x - B_x)^2 + (A_y - B_y)^2}

Sie können es mit finden.

Ich habe den Kosinussatz verwendet, weil die Antwort eine positive reelle Zahl ist und es Einschränkungen für den absoluten oder relativen Fehler mit dem korrekten Wert gibt. Daher wusste ich nicht, wie viel Fehler bei der Berechnung von "math" auftreten würde, also habe ich ihn so oft wie möglich verwendet. Es wurde durch den Kosinussatz gelöst, der die Anzahl der Verwendungen reduzieren kann.

Dies ist das Ende der ersten Hälfte. Vielen Dank für das Lesen bis zum Ende der ersten Hälfte.

In der zweiten Hälfte wird das DEF-Problem erläutert. Fortsetzung in der zweiten Hälfte.

Recommended Posts

AtCoderBeginnerContest175 Review & Summary (erste Hälfte)
AtCoderBeginnerContest164 Review & Summary (erste Hälfte)
AtCoderBeginnerContest169 Review & Summary (erste Hälfte)
AtCoderBeginnerContest174 Review & Summary (erste Hälfte)
AtCoderBeginnerContest173 Review & Summary (Erste Hälfte)
AtCoderBeginnerContest170 Review & Summary (erste Hälfte)
AtCoderBeginnerContest167 Review & Summary (erste Hälfte)
AtCoderBeginnerContest177 Review & Summary (erste Hälfte)
AtCoderBeginnerContest168 Review & Summary (erste Hälfte)
AtCoderBeginnerContest178 Review & Summary (erste Hälfte)
AtCoderBeginnerContest171 Review & Summary (erste Hälfte)
AtCoderBeginnerContest166 Review & Summary (erste Hälfte)
AtCoderBeginnerContest161 Review & Summary (erste Hälfte)
AtCoderBeginnerContest172 Review & Summary (erste Hälfte)
AtCoderBeginnerContest176 Review & Summary (erste Hälfte)
AtCoderBeginnerContest178 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest161 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest164 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest176 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest168 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest169 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest166 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest174 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest173 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest177 Review & Summary (zweite Hälfte)
AtCoderBeginnerContest180 Review & Zusammenfassung
AtCoderBeginnerContest181 Überprüfung & Zusammenfassung
AtCoderBeginnerContest182 Überprüfung & Zusammenfassung
AtCoderBeginnerContest183 Überprüfung & Zusammenfassung
AtCoderBeginnerContest179 Review & Zusammenfassung
Django Girls Tutorial Zusammenfassung Erste Hälfte
AtCoder Rückblick auf frühere Fragen (erste Hälfte von 12 / 8,9)