[Explication AtCoder] Contrôlez les problèmes A, B, (C), D de ABC165 avec Python!

Je vais vous expliquer comment résoudre les ** problèmes A, B, (C), D ** du ** AtCoder Beginners Contest 165 ** 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.

5/17 C Le problème était très difficile et l'article était long, je l'ai donc séparé en un article séparé.

[Explication AtCoder] Contrôlez le problème C de ABC165 avec Python!

ABC165

Date: 02/05/2020 (sam) 21h10 ~ 02/05/2020 (sam) 22h50 (100 minutes) Un nombre de personnes qui soumettent des questions: 11626

Performance AC But temps Classement Ligne directrice
400 AB-- 300 14 minutes 73 25e Thé performance
600 A--D 500 98 minutes 5940e Taux brun à 8 fois
800 AB-D 700 75 minutes 4505e Performance verte
1200 ABCD 1000 93 minutes 2194e Performance de l'eau

(Référence) Moi: Performance 1426 ABCD-- 41:05 1379e place D a été résolue en premier et renvoyée à C </ font>

Un problème (11225 AC)
Je pense que c'était un peu difficile.
problème B (9994 AC)
N'oubliez pas de tronquer. Si vous avez l'habitude de vérifier avec un échantillon, vous n'avez pas à émettre WA.
problème C (2514 personnes AC)
C'était très difficile. En parlant de frapper tout autour, c'est vrai ...
problème D (5554 AC)
C La difficulté est opposée au problème. C'est un problème que vous pouvez comprendre si vous l'essayez.

Le problème C est le niveau de difficulté du niveau de problème difficile D. Si vous dites simplement "faites le tour et vérifiez toutes les réponses", vous verrez souvent le problème C.

Cependant, il est difficile de remarquer que ce problème peut être arrondi sur des séquences possibles. En plus de cela, vous ne pouvez pas le résoudre sans savoir faire toutes les séquences possibles.

D'autre part, le problème D était la difficulté de niveau de problème C habituelle. Avec ce type de problème défini, vous devez avoir le courage de vous calmer et de vérifier le problème D, puis de jeter le problème C et de résoudre le problème D.

ABC165A 『We Love Golf』

** Page des problèmes **: A --We Love Golf ** Difficulté **: ★★ ☆☆☆ ** Point **: Mathématiques, manipulation en

Si vous savez comment faire tous les multiples de k en dessous de b, vous pouvez le résoudre.

Comment résoudre

  1. Pensez à quoi faire

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

Un moyen facile de trouver est d'énumérer tous les multiples de k qui sont inférieurs ou égaux à b et de faire «OK» s'il y en a au moins un qui est supérieur ou égal à a. Vous pouvez maintenant commencer à écrire du code.

Cependant, il est plus facile de trouver le multiple maximum de k en dessous de b et s'il est supérieur ou égal à a, la méthode de `` OK '' 'écrite dans le PDF de commentaire officiel, donc si vous y pensez, écrivez-la ici. Est bon. Je ne pouvais pas y penser.

code

J'écrirai deux méthodes.

k = int(input())
a, b = list(map(int, input().split()))

x = 0

#J'ai l'impression de pouvoir l'écrire un peu plus joliment, mais pour le moment, une boucle infinie+en pause
while True:
    x += k
    if a <= x <= b:
        print("OK")
        break

    if x > b:
        print("NG")
        break

k = int(input())
a, b = list(map(int, input().split()))

#Trouver "un multiple du maximum k inférieur ou égal à b"
largest = (b // k) * k

if a <= largest:
    print("OK")
else:
    print("NG")

ABC165B『1%』

** Page de problème **: B-1% ** Difficulté **: ★★ ☆☆☆ ** Point **: Manipulation en, lecture précise de l'énoncé du problème

Faites comme il est écrit, mais l'important est écrit entre parenthèses, ** "Tronquer l'argent après la virgule décimale chaque année" **.

Dans le cas de C ++ etc., vous devez faire attention au débordement, mais en Python, vous n'avez pas à vous en soucier. C'est Python, n'est-ce pas?

Comment résoudre

  1. Réfléchissez à quoi faire

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

J'ai 100 yens au début et ça augmente de 1% par an avec les intérêts composés. Si vous suivez cette rue, vous pouvez le résoudre.

Si vous lisez attentivement l'énoncé du problème, vous constaterez qu'il est très important entre parenthèses (double intérêt, ** troncature après la virgule décimale **).

Par conséquent, tronquons après la virgule décimale.

code

Une fois que vous avez lu correctement l'énoncé du problème, tout ce que vous avez à faire est de l'écrire.

Même si vous manquez la troncature après la virgule décimale, si vous la vérifiez avec un échantillon, la réponse sera différente, vous remarquerez donc que quelque chose ne va pas. J'ai remarqué.

Plus précisément, la réponse pour l'échantillon 2 est 3760 et la sortie est 3703, et l'échantillon 3 est 1706 pour 1649.

L'échantillon 2 est la plus grande contrainte de $ 10 ^ {18} $, donc je suis convaincu que si cela réussit, vous n'aurez pas à vous soucier des erreurs.

x = int(input())

year = 0 #répondre
money = 100 #Valeur initiale 100 yens

#Tournez la boucle jusqu'à ce qu'elle dépasse x yen
while money < x:
    money *= 1.01
    money = int(money)
    year += 1

print(year)

ABC165C『Many Requirements』

** Page de problème **: C --Beaucoup d'exigences ** Difficulté **: ★★★★★★★★★★ (niveau de problème Difficile D!) ** Type **: Idée round-robin, recherche prioritaire en profondeur (d'autres méthodes sont également disponibles), exercices antérieurs

Tout d'abord, il est difficile de lire l'énoncé du problème et d'en comprendre le sens. Même si vous en comprenez le sens, vous devez penser à faire toutes les séquences et à les vérifier. Et même si vous savez que vous allez faire un round robin, vous ne pouvez pas le résoudre sans savoir comment faire une séquence de nombres.

Pour être honnête, c'est la difficulté du difficile problème D.

Choses à faire

  1. (Parce que cela semble dangereux, vérifiez si le problème D est facile)
  2. Décryptez l'énoncé du problème
  3. Pensez à la solution
  4. Pensez à la mise en œuvre

Étape 1 (car cela semble dangereux, vérifiez si le problème D est facile)

Quoi? Vous pourriez penser, mais c'est important. ChezAtCoder, il est assez courant que la difficulté du problème soit inversée. Si le problème derrière est plus susceptible d'être résolu, il vaut mieux le faire en termes de points.

Cette fois, il y avait 2500 personnes AC en C et 5000 personnes AC en D, ce qui représentait plus du double de la différence. Il est rare qu'il y ait une telle différence de difficulté, mais il arrive souvent qu'il y ait une légère différence de difficulté.

Si vous vous concentrez sur le problème, vous n'aurez pas l'idée de résoudre le problème qui se cache derrière, il est donc important de se calmer et de s'éloigner du problème.

Une fois le concours terminé, je me sentais souvent frustré, "j'aurais pu résoudre ce problème!", Donc si je ne comprends pas un peu, j'essaye de vérifier le problème derrière.

Cette fois, j'ai pensé à C pendant 5 minutes et j'ai eu l'impression que c'était trop mauvais, alors j'ai résolu D en 10 minutes, puis je suis revenu à C et je l'ai résolu en 15 minutes.

Étape 2 - Article séparé

Cela fait longtemps, donc je l'ai divisé en articles séparés. J'expliquerai de trois manières.

--Utilisez itertools.combinations_with_replacement (le plus simple) --Créer avec une file d'attente récursive (méthode très polyvalente)

  • Recherche par priorité en profondeur (méthode PDF de commentaire)

[Commentaire d'AtCoder] Gagnez le problème ABC165 C "Many Requirements" avec Python!

Similaire

Voici quelques problèmes similaires. Les deux derniers sont un peu plus difficiles de niveau de difficulté D, mais toujours plus faciles que celui-ci.

Niveau marron: ABC029 C --Attaque par force brute Niveau vert: ABC161 D --Lunlun Number Niveau vert: Panasonic Programming Contest 2020 D --String Equivalence

ABC165D『Floor Function』 ** Page de problème **: D --Fonction de sol ** Difficulté **: ★★★ ☆☆ ** Type **: Mathématiques

Si vous êtes bon en mathématiques, vous pouvez trouver intuitivement la réponse. Pour ceux d'entre nous qui ne sont pas bons en maths, nous pouvons le découvrir en essayant diverses choses.

Choses à faire

  1. Essayez-le pour le moment

Étape 1: essayez-le pour le moment

Pour de tels problèmes, c'est une bonne idée de remplacer les nombres pour le moment.

Je suis heureux que $ floor (Ax / B) $ soit grand et que $ A \ times {floor (x / B)} $ soit petit.

Vous pouvez voir que ce dernier grandit lorsque $ x $ est exactement un multiple de $ B $. Ainsi, après avoir essayé diverses choses, vous pouvez voir que $ f (x + B) = f (x) $.

Par conséquent, $ x $ ne doit être considéré que dans la plage de 0 $ à (B-1) $. À ce moment, la soustraction $ A \ times {floor (x / B)} = 0 $, vous pouvez donc oublier l'existence.

Maintenant, $ floor (Ax / B) $ devient plus grand à mesure que $ x $ grossit, donc $ x $ devrait être $ B-1 $. Cependant, il existe une condition selon laquelle $ x $ est inférieur ou égal à $ N $, donc le plus petit de $ N $ et $ B-1 $ est la réponse.

code

Si vous le comprenez, ce n'est qu'une question d'écriture.

    a, b, n = list(map(int, input().split()))
    x = min(b - 1, n) # b-1 est bon, mais parfois la limite supérieure n ne le permet pas.
    ans = int(a * x / b) #Calculer. La dernière section est 0, vous n'avez donc pas à l'écrire.
    print(ans)

Recommended Posts

[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 AtCoder] Contrôlez les problèmes A, B, C d'ABC182 avec Python!
[Explication AtCoder] Contrôle ABC184 Problèmes A, B, C avec Python!
[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 ABC127 A, B, C (python)
Explication ABC126 A, B, C (python)
Résoudre AtCoder ABC168 avec python (A ~ D)
[AtCoder] Résoudre un problème de ABC101 ~ 169 avec Python
Défiez AtCoder (ABC) 164 avec Python! Un problème ~ C
AtCoder ABC 182 Python (A ~ D)
Résoudre Atcoder ABC176 (A, B, C, E) en Python
Résoudre ABC163 A ~ C avec Python
Résoudre ABC166 A ~ D avec Python
Résoudre ABC168 A ~ C avec Python
Résolu AtCoder ABC 114 C-755 avec Python3
Résoudre ABC162 A ~ C avec Python
Résoudre ABC167 A ~ C avec Python
ABC128 Commentaire A, B, C (python)
Résoudre ABC158 A ~ C avec Python
AtCoder Beginner Contest 166 A Explication du problème "A? C" (Python3, C ++, Java)
Résoudre ABC175 A, B, C 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] Résoudre ABC1 ~ 100 Un problème avec Python
Je voulais résoudre le problème ABC164 A ~ D avec Python
Résoudre ABC165 A, B, D avec Python
AtCoder Beginner Contest 176 B Problème Explication "Multiple of 9" (Python3, C ++, Java)
Une personne qui veut résoudre le problème D avec ABC d'AtCoder a essayé de gratter
Résolvez A ~ D du codeur yuki 247 avec python
Résoudre avec Ruby et Python AtCoder ABC084 D Somme cumulative des nombres premiers
Points Python du point de vue d'un programmeur en langage C
Faire un point d'arrêt sur la couche c avec python
Comment gérer "^ [[A ^ [[B ^ [[C ^ [[D"]] en appuyant sur la touche de direction lors de l'exécution de python sur mac
Résolvez AtCoder ABC166 avec python
AtCoder ABC 178 Python (A ~ E)
ABC129 Commentaire A, B, C
AtCoder ABC 176 Python (A ~ E)
AtCoder Beginner Contest 177 B Explication du problème "Sous-chaîne" (Python3, C ++, Java)
Résolution avec Ruby et Python AtCoder ABC178 D Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur
AtCoder Beginner Contest 167 Explication d'un problème "enregistrement" (Python3, C ++, Java)
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
Différent du type d'importation de python. Signification de depuis A import B
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
AtCoder ABC151 Problème D Comparaison de la vitesse en C ++ / Python / PyPy
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente
AtCoder Beginner Contest 169 B Problème Explication "Multiplication 2" (Python3, C ++, Java)