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

Je vais vous expliquer comment résoudre les ** problèmes A, B, C ** du ** AtCoder Beginners Contest 164 ** avec ** Python 3 ** aussi soigneusement que possible.

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

ABC164

Date: 26/04/2020 (dim.) 21:00 ~ 26/04/2020 (dim.) 22:40 (100 minutes) A Nombre de personnes ayant posé des questions: 11236

Performance AC temps Classement Ligne directrice
400 ABC- 29 minutes 7198e Thé performance
600 ABC- 18 minutes 5854e Taux brun à 8 fois
800 ABC- 12 minutes 4425e Performance verte
1200 ABC- 5 minutes 2081e Performance de l'eau

(Référence) Moi: Performance 1625 ABCD-- 23:03 80 5ème place </ font>

Un problème (11148 personnes AC)
Faites ce que vous écrivez. L'échantillon est également gentil.
problème B (10415 AC)
Il est plus facile de rendre les noms de variables plus faciles à comprendre sans se confondre.
problème C (9533 personnes AC)
Il existe plusieurs façons, mais si vous utilisez le type défini, il s'agit d'une seule prise.
Problème D (1926 AC) [non expliqué dans cet article]
C'est le niveau de difficulté du niveau de problème E habituel. Cela ne peut pas être aidé si vous ne pouvez pas le résoudre.

Le problème D était assez difficile, donc le simple fait de résoudre le problème C m'a donné rapidement une performance de l'eau. Je pense que vous avez ressenti l'importance de le faire de manière simple et rapide.

ABC158A 『Sheep and Wolves』

** Page de problème **: A --Moutons et loups ** Difficulté **: ☆☆☆☆☆ ** Point **: Gestion des instructions if, gestion des valeurs limites

C'est une simple question de faire exactement comme vous l'écrivez.

Énoncé du problème

<détails>

Énoncé du problème (pliage) </ summary>
abc164a.png

Comment résoudre

  1. Décryptez l'énoncé du problème

Étape 1: Lisez l'énoncé du problème

Non sûr '' lorsque le nombre de loups est ** "supérieur ou égal à" **, sinon sûr ''.

Lorsque vous jugez avec «si», soyez prudent lorsque vous manipulez la valeur limite (le nombre à la limite où le jugement change). ** "Plus de" **, donc w> = s. Si le nombre de loups est ** "plus" que le nombre de moutons **, alors w> s.

Veuillez noter que l'échantillon 3 est `` dangereux '' avec $ W = S $, donc si cela réussit, vous pouvez soumettre en toute confiance.

code

Simplement fais-le. Veillez à ne pas inverser les termes «dangereux» et «sûr», ni faire des fautes de frappe ou d'orthographe. Une erreur peut entraîner une pénalité de 5 minutes, donc même si cela prend un certain temps, assurez-vous de vérifier qu'elle correspond à tous les échantillons avant de soumettre.

s, w = list(map(int, input().split()))

if w >= s:
    print("unsafe")
else:
    print("safe")

Si vous voulez écrire sur une seule ligne, vous pouvez utiliser "opérateur ternaire". Je ne l'utilise pas car cela semble provoquer des erreurs.

s, w = list(map(int, input().split()))
print("unsafe") if w >= s else print("safe")

ABC164B『Battle』

** Page de problème **: B --Bataille ** Difficulté **: ★ ☆☆☆☆ ** Point **: Manipulation de while, élaboration de noms de variables

C'est un jeu simple dans lequel vous pouvez réduire les HP de l'adversaire du même montant que votre propre puissance d'attaque lorsque vous attaquez. Takahashi est le premier joueur et Aoki est le deuxième joueur.

Énoncé du problème

<détails>

Énoncé du problème (pliage) </ summary>
abc164b.png

Comment résoudre

  1. Réfléchissez à quoi faire

Étape 1: Réfléchissez à ce qu'il faut faire

Puisque $ A, B, C, D $ sont tous de 100 ou moins, vous pouvez le résoudre en le simulant tel quel. S'il s'agit d'un nombre très énorme tel que 5000 billions (mots morts), il sera calculé par arithmétique. (Cela n'a pas vraiment d'importance, mais il y a en fait un problème avec 5000 billions de dollars dans l'énoncé du problème)

Si le nom de la variable est changé en «a», «b», «c», «d» tel quel, il sera difficile de comprendre quelle variable est quoi, et ce sera une source de confusion. J'étais confus pendant le concours et j'ai fini par lire le texte de la question environ 5 fois.

Disons tkhp, tkat, ʻaohp, ʻaoat.

code

Écrivez ceci aussi. Pour une telle simulation, utilisez while True pour faire une boucle infinie, et si les conditions sont remplies, utilisez break pour quitter.

tkhp, tkat, aohp, aoat = list(map(int, input().split()))

while True:
    aohp -= tkat
    if aohp <= 0:
        print("Yes")
        break

    tkhp -= aoat
    if tkhp <= 0:
        print("No")
        break

Au fait, si vous laissez le nom de la variable comme énoncé du problème, ce sera le code ci-dessous. C'est un code qui semble induire des erreurs. Vous pouvez voir l'importance des noms de variables! (Autodiscipline)

while True:
    c -= b
    if c <= 0:
        print("Yes")
        break

    a -= d
    if a <= 0:
        print("No")
        break

ABC164C『gacha』

** Page de problème **: C --gacha ** Difficulté **: ★★ ☆☆☆ ** Type **: Utilisation du type d'ensemble

Vous pouvez facilement comprendre la signification de l'énoncé du problème. Le plaisir dépend de la façon dont vous le mettez en œuvre.

Énoncé du problème

<détails>

Énoncé du problème (pliage) </ summary>
abc164c.png

Choses à faire

  1. Réfléchissez à la façon de demander

Étape 1: Réfléchissez à la façon de demander

Il existe différentes manières de trouver le nombre de types, mais le type d'ensemble est le plus simple.

Si vous recevez normalement l'entrée sous forme de type de liste et que vous en faites un type d'ensemble, les éléments en double (double) disparaîtront. Puisque le nombre d'éléments de type set est le nombre de types lui-même, vous pouvez trouver la réponse en utilisant la fonction len ().

Je ne pense pas que vous puissiez le comprendre même s'il est dit avec des mots. Il n'y a rien de difficile si vous regardez ce qui va se passer.

>>> s = ['apple', 'orange', 'apple']
>>> s_set = set(s)
>>> s_set
{'orange', 'apple'} #Il y en a deux'apple'Est devenu un
>>> len(s_set)
2 # 'orange'Quand'apple'Il existe deux types.
>>> s = ['grape', 'grape', 'grape', 'grape', 'grape']
>>> s_set = set(s)
>>> s_set
{'grape'} #Il y en a 5'grape'Est devenu un
>>> len(s_set)
1 # 'grape'C'est un type de.

code

n = int(input())
s = [input() for _ in range(n)] #Je reçois des entrées dans une notation incluse dans la liste qui semble soignée. La même chose est vraie avec la boucle for.

ss = set(s) #Créez un type d'ensemble de s. C'est un mauvais nom de variable, mais c'est un code court donc je pense que ça va.
ans = len(ss) #Vous pouvez maintenant voir le nombre de types.
print(ans)

Seulement 3 lignes hors entrée. Si vous utilisez print (len (set (s))), ce sera une ligne, mais si vous n'y êtes pas habitué, essayez de ne faire qu'une ligne par ligne.

La technique de conversion en type d'ensemble et de recherche du nombre de types avec len est très souvent utilisée, alors n'oubliez pas de la retenir.

Bonus (à propos du compteur)

Pas pertinent pour ce problème, mais vous voulez souvent savoir combien de fois chaque élément est apparu.

Dans un tel cas, il est plus facile d'écrire from collections import Counter et d'utiliser le type Counter. Je l'utilise aussi souvent que le type de set.

Je ne vais pas expliquer comment l'utiliser cette fois, donc si vous voulez le savoir, veuillez le vérifier. Pour expliquer brièvement à quoi il ressemble, c'est un compteur pratique avec diverses fonctions ajoutées au type dict.

Recommended Posts