** AtCoder Beginners Contest 168 ** ** A-, B-, C-Probleme ** werden mit ** Python 3 ** so sorgfältig wie möglich erklärt.
Ich möchte eine Lösung erklären, die die folgenden drei Punkte erfüllt, nicht nur eine Methode, die gelöst werden kann.
AtCoder Beginners Contest 168 Gesamtzahl der Einreichungen: 10866
Performance | AC | Ergebnis | Zeit | Rangfolge | Richtlinie |
---|---|---|---|---|---|
400 | ABC--- | 600 | 62 Minuten | 6607 | Teeleistung |
600 | ABC--- | 600 | 36 Minuten | 5323 .. | Teerate bei 8 mal |
800 | ABC--- | 600 | 16 Minuten | 4025 | Grüne Leistung |
1000 | ABCD-- | 1000 | 76 Minuten | 2861 .. | Green Rate bei 8 mal |
1200 | ABCD-- | 1000 | 48 Minuten | Wasserleistung |
(Referenz) Me: 1244. Performance 1418
** Problemseite **: A-∴ (daher) ** Schwierigkeit **: ★ ☆☆☆☆ ** Punkt **: Umgang mit Zeichenketten oder Umgang mit Resten
Wenn Sie die Stelle der angegebenen Nummer kennen, können Sie den Rest jeweils lösen.
A Ich denke, es ist ein wenig problematisch für das Problem. Infolgedessen ist es schneller, die Hand zu bewegen, bevor Sie darüber nachdenken.
Es gibt zwei Muster, um den 1. Platz zu finden.
c = n [-1]
(str-Typ) setzenc = n% 10
(int type) setzenDanach können Sie so etwas wie ~~ wenn c in ["0", "1", "6", "8"] tun: ~~ wenn c in" 0168 "
. (Ich habe es geändert, weil es einfacher ist, Zeichenfolgen als Listen einzugeben.)
Dies ist das Muster, das als Zeichenfolge empfangen wird. Das "hon" -Muster erfordert die Eingabe der meisten 5 Zeichen, was problematisch ist, so dass es etwas einfacher ist, es zu einem else-Block zu machen.
bon
, pon
, hon
sind ähnlich und verwirrend. Beeilen Sie sich also nicht und überprüfen Sie sie sorgfältig, bevor Sie sie einreichen, um keine unnötige WA zu generieren.
(Wenn es sich jedoch um eine Zeichenfolge handelt, können Sie sofort "24579" eingeben, sodass es möglicherweise schwieriger ist, einen Fehler zu machen, wenn Sie ihn in der Reihenfolge der Problemstellung schreiben.) </ font>
n = input()
c = n[-1]
if c in "3":
print("bon")
elif c in "0168":
print("pon")
else:
print("hon")
Hier ist ein Muster, das eine ganze Zahl annimmt und den Platz der 1 durch den Rest findet, nachdem es durch 10 geteilt wurde.
n = int(input())
c = n % 10
if c in [3]:
print("bon")
elif c in [0, 1, 6, 8]:
print("pon")
else:
print("hon")
** Problemseite **: B -... (Triple Dots) ** Schwierigkeit **: ★ ☆☆☆☆ ** Punkt **: Umgang mit Zeichenketten
Python ist super einfach. Danke an Python.
Lassen Sie uns vorerst die Länge der Zeichenfolge ermitteln. Dies ist ein Schuss mit l = len (s )
.
Wenn if l <= k:
, kann es so ausgegeben werden, wie es ist, also ist es print (s)
.
Wenn nicht, schneiden Sie das erste $ K $ -Zeichen aus und fügen Sie am Ende der Ausgabe "..." hinzu. Das heißt, print (s [: k] + '...')
. s [: k]
ist das 0. bis k-1. Zeichen von s, also ist die Summe k Zeichen.
Vorsichtshalber ist es besser, das "..." aus der Problemstellung zu kopieren und einzufügen.
Ich habe einen Fehler gemacht und "". .. .. Es kann nicht gesagt werden, dass die Möglichkeit besteht, WA durch Schreiben von "" oder "..." auszugeben.
k = int(input())
s = input()
l = len(s)
if l <= k:
print(s)
else:
print(s[:k]+'...')
** Problemseite **: C-: (Doppelpunkt) ** Schwierigkeit **: ★★★★ ☆ (Es gibt individuelle Unterschiede) ** Punkt **: Kenntnisse in Mathematik, Bogenmaß und Frequenzmethode
Es ist ein Mathematikproblem der High School. Verwenden Sie den Kosinussatz.
Für solche mathematischen Probleme kann es zweckmäßig sein, einen Funktionsrechner zur Hand zu haben.
Auch wenn Sie keinen haben, verfügt der mit Windows gelieferte Taschenrechner über einen Funktionsrechnermodus. Oder Suche mit Funktionsrechner mit Google-SucheDu darfst.
Mathematikprobleme sind von Person zu Person sehr unterschiedlich. Die Schwierigkeit von AtCoder-Problemen betrug 107, aber es gibt einige Leute, die es nicht einmal mit Wasser oder blauem Codierer lösen konnten. Es ist also in Ordnung, wenn Sie es nicht tun können. ist.
Um bestimmte Zahlen anzugeben, sind die AC / Teilnehmer Wasser 702/742 und Blau 333/350. Man kann sagen, dass die Leute in diesem Ratenband ganz besondere Probleme hatten, weil fast alle von ihnen AC für das übliche C-Problem waren.
Es gibt zwei Möglichkeiten, dies zu lösen.
--Berechnen Sie mit dem Kosinussatz --Finden Sie die Koordinaten der Nadel und verwenden Sie den Drei-Quadrat-Satz
Die meisten Leute machen es mit dem Kosinussatz, deshalb werde ich es hier erklären. In der Tat sollten Leute, die durch Koordinaten herausfinden wollen, gut in Mathematik sein, so dass es nicht nötig ist, diese Erklärung zu lesen.
Der Kosinussatz, den ich in der High School gemacht habe, ist eine Formel zum Ermitteln der Länge der verbleibenden einen Seite von den beiden Seiten des Dreiecks und des Winkels zwischen ihnen.
Da $ a $ und $ b $ als Längen der Stunden- bzw. Minutenzeiger angegeben werden, können sie gelöst werden, indem der Winkel $ θ $ zwischen den Stunden- und Minutenzeigern bekannt ist.
Wenn Sie motiviert sind, würde ich ein Diagramm zeichnen, aber es ist problematisch, also [Google-Cosinussatz und Suche](https://www.google.com/search?q=%E4%BD%99%E5%BC%A6%] E5% AE% 9A% E7% 90% 86) Sie erhalten viele schöne Bilder.
Wie finde ich den Winkel zwischen den Nadeln?
Finden Sie die Winkel der Minuten- und Stundenzeiger, wobei der Scheitelpunkt um 00:00 Uhr 0 Grad beträgt. Ziehen Sie dann den anderen Winkel von dem, der sich vorwärts bewegt.
Wenn beispielsweise der Stundenzeiger 15 Grad und der Minutenzeiger 60 Grad beträgt, sind 60-15 = 45 Grad. (Da es sich um eine angemessene Zahl handelt, denke ich nicht, dass dies bei einer echten Uhr ein solcher Winkel sein wird.)
Da es in 60 Minuten 360 Grad ist, rückt es in 1 Minute um 360 ÷ 60 = 6 Grad vor.
Da es in 12 Stunden 360 Grad ist, rückt es in 1 Stunde um 360 ÷ 12 = 30 Grad vor. Denken Sie jedoch daran, dass es in Minuten voranschreitet, genau wie eine echte Uhr.
Es ist einfacher zu verstehen, wenn Sie denken, dass 60 Minuten x 12 Stunden = 720 Minuten 360 Grad und 1 Minute 360 ÷ 720 = 0,5 Grad sind. Zum Beispiel um 9:45 Uhr 9 x 60 + 45 = 585 Minuten und 585 x 0,5 = 292,5 Grad.
Angenommen, der Stundenzeiger beträgt 5 Grad und der Minutenzeiger 350 Grad. (Dieser Winkel ist auch angemessen)
Zu diesem Zeitpunkt sind 350-5 = 345 Grad, aber ich habe das Gefühl, dass zwischen den Nadeln ein scharfer Winkel von 15 Grad besteht.
Es ist jedoch in Ordnung, mit einem stumpfen Winkel von 345 Grad zu rechnen. Dies liegt daran, dass $ cos (θ) = cos (360 ° -θ) $ ist. Wenn Sie sich an den Einheitskreis erinnern, können Sie ihn verstehen, indem Sie sich daran erinnern. Weitere Informationen finden Sie auf der Website, auf der die Mathematik richtig erklärt wird.
Außerdem habe ich dies vergessen und versucht zu konvertieren, und ich habe fälschlicherweise 1WA bei der Konvertierung ausgegeben.
Das Modul math
hat eine eigene Funktion,math.cos ()
.
Fügen Sie jedoch nicht den Winkel, den Sie gerade gefunden haben, in die Funktion math.cos ()
ein. Dies liegt daran, dass die Eingabe der Funktion math.cos ()
im Bogenmaß erfolgt ($ \ pi = 180 ^ \ circ $).
Sie müssen sich nicht die Mühe machen, die Definition von Radian zu berechnen oder sich daran zu erinnern. Mit der Funktion "math.radians ()" können Sie Frequenzen in Bogenmaß umwandeln.
Ich werde es noch einmal schreiben, aber die Formel des Kosinussatzes lautet
ist.
Sie werden nach $ c ^ {2} $ gefragt. Nehmen wir also die Route richtig und machen Sie sie zu $ c $.
"Subtrahieren Sie den Winkel der anderen Nadel vom Winkel der vorrückenden Nadel" ist dasselbe wie den "absoluten Wert der Differenz" zu nehmen, also habe ich das geschrieben. (Eigentlich ist es okay, wenn Sie dies nicht tun und es wird negativ)
import math
a, b, h, m = list(map(int, input().split()))
deg_a = (60 * h + m) * (360 / (60 * 12))
deg_b = m * (360 / 60)
deg = abs(deg_a - deg_b)
rad = math.radians(deg)
c2 = a ** 2 + b ** 2 - 2 * a * b * math.cos(rad)
print(c2 ** 0.5)
Wie ich zuvor geschrieben habe, wird als "abs (deg_a --deg_b)" der Wert berechnet, der durch Subtrahieren des Winkels der Nadel, die nicht vorrückt, vom Winkel der Nadel, die vorrückt, berechnet wird, aber es ist in Ordnung, mit Minus zu berechnen.
Dies liegt an der Natur der Dreiecksfunktion. Sie können es von Google sehen.
Recommended Posts