[PYTHON] AtCoderBeginnerContest168 Review & Summary (premier semestre)

AtCoder ABC168 Ceci est un résumé des problèmes du concours AtCoder Beginner Contest 168 qui s'est tenu le 17/05/2020 (dimanche) dans l'ordre du problème A, en tenant compte de la considération. La première moitié traite des problèmes jusqu'à ABC. Le problème est cité, mais veuillez consulter la page du concours pour plus de détails. Cliquez ici pour la page du concours Commentaire officiel PDF

Problème A ∴ (donc)

Énoncé du problème Iroha a décidé d'enseigner le japonais à son chat, Sunuke, qui veut jouer au célèbre jeu japonais "Åt Coder". Lors du comptage des crayons en japonais, "livre" est ajouté après le numéro comme numéro auxiliaire. Ce numéro auxiliaire est lu différemment selon le numéro auquel il est attaché. Plus précisément, pour un entier positif $ N $ inférieur à 999 , la lecture de "livre" en disant " N $ livre" est ・ Lorsque la place $ 1 $ de $ N $ est $ 2,4,5,7,9 $, "hon" ・ Lorsque la place $ 1 $ de $ N $ est 0,1,6,8 $ $, "pon" ・ "Bon" lorsque la place $ 1 $ de $ N $ est 3 $ $ . $ N $ est donné, donc affichez la lecture du "livre" lorsque vous dites "$ N $ livre".

L'entrée est reçue sous forme de nombre, et le reste après la division par 10 $ est de l'ordre de 1 $, donc le cas est divisé par cette valeur. Je pense que c'est une erreur, mais afin de la soumettre le plus tôt possible, je règle la sortie de "hon" sur ʻelse` (l'écriture de l'expression conditionnelle devient un peu plus courte).

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")

Problème B ... (trois points)

Énoncé du problème Il existe une chaîne $ S $ composée de lettres minuscules. Si la longueur de $ S $ est inférieure à $ K $, affichez $ S $ tel quel. Si la longueur de $ S $ est supérieure à $ K $, découpez uniquement le premier caractère $ K $ et ajoutez ... à la fin de la sortie.

Pour le moment, comparez la longueur de $ S $ avec $ K $ dans l'instruction if, et écrivez le traitement lorsqu'il dépasse le suivant et la fin. Puisque python peut gérer les chaînes de caractères comme un tableau, je l'ai écrit sans utiliser l'instruction for.

abc168b.py


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

Le problème B a été résolu en quelques minutes depuis le début du concours, j'ai donc pu le résoudre dans mon temps idéal.

Problème C: (Colon)

Énoncé du problème Prenons une horloge analogique dont les aiguilles des heures et des minutes sont respectivement $ A $ centimètres et $ B $ centimètres. Une extrémité de chacune des aiguilles des heures et des minutes est fixée au même point fixe et chaque aiguille tourne dans le sens des aiguilles d'une montre à une vitesse angulaire constante autour de ce point. L'aiguille des heures est de 12 $ l'heure et l'aiguille des minutes est de 1 $ l'heure. À 0 $, les aiguilles des heures et des minutes se chevauchent. À combien de centimètres les extrémités non fixées des mains à 2 $ sont séparées lorsqu'elles n'atteignent que $ H $ heures et $ M $ minutes?

J'ai trouvé plusieurs façons de le résoudre, mais je l'ai résolu en utilisant le théorème du cosinus. La valeur $ D $ que vous recherchez est

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

Puisqu'il peut être calculé avec, il peut être résolu en calculant $ \ theta $. Si les angles des aiguilles des heures et des minutes de 0 heure aux aiguilles dans le sens des aiguilles d'une montre sont respectivement $ \ theta_A et \ theta_B $.

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

Par conséquent, l'angle $ \ theta $ formé par les aiguilles des heures et des minutes est

\theta = \theta_A - \theta_B

Vous pouvez le trouver avec. Ici, il est possible que $ \ theta $ soit supérieur à 180 $ degrés ou négatif.

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

Par conséquent, la longueur peut être calculée en calculant le théorème du cosinus sans aucun problème.

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)

Une autre chose que j'ai trouvée était $ (A_x, A_y) = (A \ cos \ theta_1, A \ sin \ theta_1), (B_x, B_y) = (B \ cos \ theta_2, B) pour les coordonnées pointées par les aiguilles des heures et des minutes, respectivement. \ sin \ theta_2) $, et $ D $ que vous voulez trouver en utilisant le théorème des trois carrés

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

Vous pouvez le trouver avec.

J'ai utilisé le théorème du cosinus parce que la réponse est un nombre réel positif et qu'il y a des restrictions sur l'erreur absolue ou relative avec la valeur correcte, donc je ne savais pas combien d'erreur se produirait dans le calcul de math, donc je l'ai utilisé autant que possible. Il a été résolu par le théorème du cosinus qui peut réduire le nombre d'utilisations.

C'est la fin du premier semestre. Merci d'avoir lu jusqu'à la fin du premier semestre.

La seconde moitié expliquera le problème DEF. Suite au second semestre.

Recommended Posts

AtCoderBeginnerContest175 Review & Summary (premier semestre)
AtCoderBeginnerContest164 Review & Summary (premier semestre)
AtCoderBeginnerContest169 Review & Summary (premier semestre)
AtCoderBeginnerContest174 Review & Summary (premier semestre)
AtCoderBeginnerContest173 Review & Summary (First Half)
AtCoderBeginnerContest170 Review & Summary (premier semestre)
AtCoderBeginnerContest167 Review & Summary (premier semestre)
AtCoderBeginnerContest177 Review & Résumé (premier semestre)
AtCoderBeginnerContest168 Review & Summary (premier semestre)
AtCoderBeginnerContest178 Review & Summary (premier semestre)
AtCoderBeginnerContest171 Review & Summary (premier semestre)
AtCoderBeginnerContest166 Review & Summary (premier semestre)
AtCoderBeginnerContest161 Review & Summary (premier semestre)
AtCoderBeginnerContest172 Review & Summary (premier semestre)
AtCoderBeginnerContest176 Review & Summary (premier semestre)
AtCoderBeginnerContest178 Review & Summary (second semestre)
AtCoderBeginnerContest161 Review & Summary (second semestre)
AtCoderBeginnerContest164 Review & Summary (second semestre)
AtCoderBeginnerContest176 Review & Summary (second semestre)
AtCoderBeginnerContest168 Review & Summary (second semestre)
AtCoderBeginnerContest169 Review & Summary (second semestre)
AtCoderBeginnerContest166 Review & Summary (second semestre)
AtCoderBeginnerContest174 Review & Summary (second semestre)
AtCoderBeginnerContest173 Review & Summary (second semestre)
AtCoderBeginnerContest177 Review & Summary (second semestre)
AtCoderBeginnerContest180 Examen et résumé
AtCoderBeginnerContest181 Examen et résumé
AtCoderBeginnerContest182 Examen et résumé
AtCoderBeginnerContest183 Review & Résumé
AtCoderBeginnerContest179 Review & Résumé
Résumé du didacticiel Django Girls Première moitié
AtCoder Revue des questions précédentes (première moitié de 12 / 8,9)