[Explication AtCoder] Contrôle ABC168 Problèmes A, B, C avec Python!

** AtCoder Beginners Contest 168 ** ** Les problèmes A, B, C ** seront expliqués aussi soigneusement que possible avec ** Python 3 **.

Je vise à expliquer une solution qui satisfait les trois points suivants, pas seulement une méthode qui peut être résolue.

AtCoder Beginners Contest 168 Nombre total de soumissions: 10866

Performance AC But temps Classement Ligne directrice
400 ABC--- 600 62 minutes 6607e Thé performance
600 ABC--- 600 36 minutes 5323e Tarif du thé à 8 fois
800 ABC--- 600 16 minutes 4025e Performance verte
1000 ABCD-- 1000 76 minutes 2861e Tarif vert à 8 fois
1200 ABCD-- 1000 48 minutes 1950e Performance de l'eau

(Référence) Me: 1244th Performance 1418 ss_4.png Je suis une personne qui a choisi les statistiques et qui s'est échappée parce que je ne veux pas faire de vecteurs avec le nombre de centres IIB. (Quand est-ce?)

Un problème (10686 personnes AC) "∴ (Par conséquent)"
Si vous savez comment retirer la 1ère place, vous pouvez la résoudre. Je l'utilise beaucoup, alors souvenons-nous-en en 3 secondes.
Problème B (10466 AC) "... (Triple Dots)"
Avec Python, faites-le simplement.
Problème C (7598 personnes AC) ": (Colon)"
Vous souvenez-vous du théorème du cosinus? J'ai cherché sur Google.
D problem (3856 personnes AC) ".. (Double Dots)" [Non expliqué dans cet article] Vous pouvez effectuer une recherche de priorité de largeur (BFS) à partir de
1. La réponse est toujours oui.

Problème A "∴ (Par conséquent)"

** Page de problème **: A-∴ (Par conséquent) ** Difficulté **: ★ ☆☆☆☆ ** Point **: Gestion des chaînes de caractères ou gestion des restes

Si vous connaissez les emplacements du nombre donné, vous pouvez résoudre le reste dans chaque cas.

R Je pense que c'est un peu gênant pour le problème. En conséquence, il est plus rapide de bouger votre main avant d'y penser.

Comment résoudre

  1. Pensez à la mise en œuvre

Étape 1: Pensez à la mise en œuvre

Il existe deux modèles pour trouver la 1ère place.

--Recevoir sous forme de chaîne de caractères et définir c = n [-1] (type str) --Recevoir sous forme d'entier et définir c = n% 10 (type int)

Après cela, vous pouvez faire quelque chose comme ~~ if c dans ["0", "1", "6", "8"]: ~~ ʻif c dans "0168" `. (Je l'ai changé car il est plus facile de taper des chaînes que des listes)

code

Il s'agit du modèle reçu sous forme de chaîne de caractères. Le motif «hon» nécessite de taper le plus de 5 caractères, ce qui est gênant, donc en faire un bloc else est un peu plus facile.

bon, pon, hon sont similaires et déroutants, alors ne vous précipitez pas et vérifiez soigneusement avant de soumettre afin de ne pas générer de WA inutiles.

(Cependant, s'il s'agit d'une chaîne de caractères, vous pouvez taper «" 24579 "» en un instant, il peut donc être plus difficile de faire une erreur si vous l'écrivez dans l'ordre de l'énoncé du problème) </ font>

n = input()
c = n[-1]

if c in "3":
    print("bon")
elif c in "0168":
    print("pon")
else:
    print("hon")

Voici un modèle qui prend un entier et trouve la place du 1 par le reste après avoir divisé par 10.

n = int(input())
c = n % 10

if c in [3]:
    print("bon")
elif c in [0, 1, 6, 8]:
    print("pon")
else:
    print("hon")

Problème B "... (Triple Dots)"

** Page de problème **: B -... (Triple Dots) ** Difficulté **: ★ ☆☆☆☆ ** Point **: Gestion des chaînes de caractères

Python est super facile. Merci à Python.

Comment résoudre

  1. Pensez à la mise en œuvre

Étape 1: Pensez à la mise en œuvre

Pour le moment, trouvons la longueur de la chaîne de caractères. C'est un coup avec l = len (s).

Si ʻif l <= k: , vous pouvez le sortir tel quel, donc c'est print (s) `.

Sinon, découpez le premier caractère $ K $ et ajoutez `` '...' 'à la fin de la sortie. Autrement dit, print (s [: k] + '...'). s [: k] est le 0e au k-1e caractère de s, donc le total est de k caractères.

code

Au cas où, il est préférable de copier et coller le `` ... '' de l'énoncé du problème.

J'ai fait une erreur et `` '. .. .. On ne peut pas dire qu'il existe une possibilité d'émettre WA en écrivant «» ou «...» ».

    k = int(input())
    s = input()

    l = len(s)

    if l <= k:
        print(s)
    else:
        print(s[:k]+'...')

Problème C ": (Colon)"

** Page de problème **: C-: (Colon) ** Difficulté **: ★★★★ ☆ (Il y a des différences individuelles) ** Point **: Connaissance des mathématiques du secondaire, du radian et de la méthode des fréquences

C'est un problème de mathématiques au secondaire. Utilisez le théorème du cosinus.

Pour de tels problèmes mathématiques, il peut être pratique d'avoir une calculatrice de fonctions à portée de main.

Même si vous n'en avez pas, la calculatrice fournie avec Windows dispose d'un mode de calculatrice de fonctions. Ou Rechercher avec Function Calculator avec Google Searchtu peux.

Les problèmes de mathématiques varient considérablement d'une personne à l'autre. La difficulté de AtCoder Problems était de 107, mais il y a des gens qui ne pouvaient pas le résoudre même avec de l'eau ou un codeur bleu, donc ça va si vous ne pouvez pas le faire. est.

Pour donner des chiffres précis, les AC / participants sont l'eau 702/742 et le bleu 333/350. On peut dire que les gens dans cette bande de taux étaient des problèmes tout à fait spéciaux parce que presque tous AC pour le problème C habituel.

Comment résoudre

  1. Pensez à la solution
  2. Trouvez l'angle entre les aiguilles
  3. Faites attention à l'utilisation de la fonction cos de Python (changez la fréquence en radian)
  4. Suivez la route correctement

Étape 1: pensez à la solution

Il y a deux façons de le résoudre.

--Calculer à l'aide du théorème du cosinus

  • Trouvez les coordonnées de l'aiguille et utilisez le théorème des trois carrés

La plupart des gens le font avec le théorème du cosinus, je vais donc l'expliquer ici. En fait, les gens qui veulent le savoir par coordonnées devraient être bons en mathématiques, il n'est donc pas nécessaire de lire cette explication.

Le théorème du cosinus que j'ai fait au lycée est une formule pour trouver la longueur du côté restant des deux côtés du triangle et l'angle entre eux.

c^{2} = a^{2} + b^{2} - 2abcos{θ}

Puisque $ a $ et $ b $ sont respectivement donnés comme les longueurs des aiguilles des heures et des minutes, ils peuvent être résolus en connaissant l'angle $ θ $ entre les aiguilles des heures et des minutes.

Si vous êtes motivé, je dessinerais un diagramme, mais c'est gênant, donc [Théorème du cosinus Google et recherche](https://www.google.com/search?q=%E4%BD%99%E5%BC%A6%] E5% AE% 9A% E7% 90% 86) Vous obtiendrez beaucoup de belles images.

Étape 2: Trouvez l'angle entre les aiguilles

Comment puis-je trouver l'angle entre les aiguilles?

Trouvez les angles des aiguilles des minutes et des heures, avec le sommet à 00:00 à 0 degré. Ensuite, tirez l'autre angle de celui qui avance.

Par exemple, si l'aiguille des heures est à 15 degrés et l'aiguille des minutes à 60 degrés, alors 60-15 = 45 degrés. (Parce que c'est un nombre approprié, je ne pense pas que ce sera un tel angle avec une vraie horloge)

Angle de la main minute

Puisqu'il fait 360 degrés en 60 minutes, il avance de 360 ÷ 60 = 6 degrés en 1 minute.

Angle de l'aiguille des heures

Puisqu'il fait 360 degrés en 12 heures, il avance de 360 ÷ 12 = 30 degrés en 1 heure. Cependant, gardez à l'esprit qu'elle avance en quelques minutes, tout comme une vraie horloge.

Il est plus facile de comprendre si vous pensez que 60 minutes x 12 heures = 720 minutes correspondent à 360 degrés et 1 minute à 360 ÷ 720 = 0,5 degrés. Par exemple, à 9h45, 9 x 60 + 45 = 585 minutes et 585 x 0,5 = 292,5 degrés.

Vous n'êtes pas obligé de le fixer à un angle aigu

Par exemple, supposons que l'aiguille des heures soit de 5 degrés et celle des minutes de 350 degrés. (Cet angle est également approprié)

À ce moment, 350-5 = 345 degrés, mais je sens qu'il y a un angle aigu de 15 degrés entre les aiguilles.

Cependant, il est normal de calculer avec un angle émoussé de 345 degrés. C'est parce que $ cos (θ) = cos (360 ° -θ) $. Si vous vous souvenez du cercle d'unité, vous pouvez le comprendre en vous en souvenant. Pour plus de détails, veuillez consulter le site qui explique correctement les mathématiques.

De plus, j'ai oublié cela et j'ai essayé de convertir, et j'ai émis par erreur 1WA dans la conversion.

Étape 3: Faites attention à l'utilisation de la fonction cos de Python (changez la fréquence en radian)

Le module math a sa propre fonction,math.cos ().

Cependant, ne mettez pas l'angle que vous venez de trouver dans la fonction math.cos (). Ceci est dû au fait que l'entrée de la fonction math.cos () est en radian ($ \ pi = 180 ^ \ circ $).

Vous n'avez pas à vous soucier de calculer ou de vous souvenir de la définition de Radian. Vous pouvez utiliser la fonction math.radians () pour convertir les fréquences en radians.

Étape 4: emprunter correctement l'itinéraire

Je vais l'écrire à nouveau, mais la formule du théorème du cosinus est

c^{2} = a^{2} + b^{2} - 2abcos{θ}

est.

On vous demandera $ c ^ {2} $, alors prenons la route correctement et faisons-la $ c $.

code

J'ai écrit que "soustraire l'angle de l'autre aiguille de l'angle de celle qui bouge" revient à prendre la "valeur absolue de la différence". (En fait, ce n'est pas grave si vous ne le faites pas et cela devient négatif)

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)

À part: vous pouvez le laisser négatif

Comme je l'ai écrit plus tôt, comme ʻabs (deg_a --deg_b) `, la valeur obtenue en soustrayant l'angle de l'aiguille qui n'avance pas de l'angle de l'aiguille qui avance est calculée, mais il est correct de calculer avec moins.

Ceci est dû à la nature de la fonction triangulaire. Vous pouvez le voir par google.

Recommended Posts

[Explication AtCoder] Contrôle ABC180 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôle ABC158 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôle ABC164 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôle ABC168 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôle ABC184 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôlez les problèmes A, B, (C), D de ABC165 avec Python!
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC183 avec Python!
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC181 avec Python!
Explication ABC127 A, B, C (python)
Explication ABC126 A, B, C (python)
Résoudre Atcoder ABC176 (A, B, C, E) en Python
Résoudre ABC168 A ~ C avec Python
Résolu AtCoder ABC 114 C-755 avec Python3
Résoudre ABC162 A ~ C avec Python
ABC128 Commentaire A, B, C (python)
Résoudre ABC158 A ~ C avec Python
Résoudre ABC175 A, B, C avec Python
[AtCoder] Résoudre ABC1 ~ 100 Un problème avec Python
Résoudre AtCoder ABC168 avec python (A ~ D)
[AtCoder] Résoudre un problème de ABC101 ~ 169 avec Python
AtCoder ABC 177 Python (A ~ E)
AtCoder ABC 178 Python (A ~ E)
ABC129 Commentaire A, B, C
AtCoder ABC 176 Python (A ~ E)
AtCoder ABC 182 Python (A ~ D)
AtCoder Beginner Contest 174 B Explication du problème "Distance" (C ++, Python, Java)
Résoudre ABC166 A ~ D avec Python
ABC166 en Python A ~ C problème
Recommandation de résolution des problèmes d'AtCoder avec python (20200517-0523)
Résoudre ABC036 A ~ C avec Python
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
Modèle AtCoder ABC 179 Python (A ~ E)
Résoudre ABC037 A ~ C avec Python
AtCoder Beginner Contest 169 B Problème Explication "Multiplication 2" (Python3, C ++, Java)
AtCoder Beginner Contest 170 Un problème Explication des «cinq variables» (C ++, Python, Java)
[Commentaire d'AtCoder] Gagnez le problème ABC165 C "Many Requirements" avec Python!
AtCoder Beginner Contest 169 Explication du problème "Multiplication 1" (Python3, C ++, Java)
AtCoder Beginner Contest 176 A Explication du problème "Takoyaki" (Python3, C ++, Java)
AtCoder Beginner Contest 175 B Explication du problème "Making Triangle" (C ++, Python3, Java)
AtCoder Beginner Contest 175 Explication d'un problème "Saison des pluies" (C ++, Python3, Java)
Résolution avec Ruby, Python et numpy AtCoder ABC054 B Calcul de la matrice
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 065 C-th power
AtCoder Beginner Contest 176 B Problème Explication "Multiple of 9" (Python3, C ++, Java)
AtCoder Beginner Contest 174 Explication d'un problème "Climatiseur" (C ++, Python, Java)
[Python] [Explication] Concours DP typique d'AtCoder: un concours
python> Arguments de mot clé> hoge (** {'a': 1, 'b': 2, 'c': 3})
Résoudre ABC165 A, B, D avec Python
AtCoder ABC 174 Python
AtCoder ABC 175 Python
Résolution avec Ruby et Python AtCoder ABC057 C Décomposition du facteur premier Recherche complète de bits
AtCoder Beginner Contest 173 B Problème Explication du "Récapitulatif de l'état du juge" (Python3, C ++, Java)