** 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 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?)
** 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.
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)
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")
** Page de problème **: B -... (Triple Dots) ** Difficulté **: ★ ☆☆☆☆ ** Point **: Gestion des chaînes de caractères
Python est super facile. Merci à Python.
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.
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]+'...')
** 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.
Il y a deux façons de le résoudre.
--Calculer à l'aide du théorème du cosinus
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.
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.
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)
Puisqu'il fait 360 degrés en 60 minutes, il avance de 360 ÷ 60 = 6 degrés en 1 minute.
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.
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.
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.
Je vais l'écrire à nouveau, mais la formule du théorème du cosinus est
est.
On vous demandera $ c ^ {2} $, alors prenons la route correctement et faisons-la $ c $.
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)
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