Récemment, j'ai commencé la programmation compétitive avec AtCoder pour améliorer mes compétences. Pour être honnête, je suis dépassé par la vitesse à laquelle les ingénieurs autour de moi peuvent le résoudre, mais c'est amusant de pouvoir le résoudre petit à petit.
La première chose qui reste bloquée au début est de savoir comment gérer l'entrée de données données. Un problème courant pour les débutants est la saisie de nombres entiers, la saisie de N nombres, etc. Du côté de l'utilisation de Python, honnêtement, je n'utilise pas tellement l'entrée standard (je ne suis pas le seul ...?) Par conséquent, je voudrais résumer les modèles personnels qui sont souvent utilisés dans le premier système d'entrée.
Ce que j'utilise actuellement est sys.stdin.readline (), qui lit ligne par ligne. Je lis aussi le code de saut de ligne, mais je l'utilise car il est facile à utiliser. Il est pratique d'affecter à l'avance sys.stdin.readline à input car il ne peut être utilisé qu'avec input (). Avec cette entrée, vous obtenez une chaîne.
input.py
import sys
input = sys.stdin.readline
hogehoge = input()
Si c'est un exemple d'entrée commune qui résout réellement le problème (je le fais de manière appropriée)
3
1 5
2 8
9 15
Dans de nombreux cas, il y a le nombre de lignes à saisir en premier, puis plusieurs nombres sont entrés dans ce nombre de lignes. Maintenant, traitons cela pour qu'il soit réellement facile à utiliser.
Tout d'abord, le nombre entré est une chaîne de caractères (type str), changeons-le donc en int. De plus, comme la readline contient un code de saut de ligne, omettons cela également. Si vous utilisez rstrip (), il prendra le code de saut de ligne. Python peut être converti en int avec int ().
input.py
import sys
input = sys.stdin.readline
hogehoge = int(input().rstrip())
Cela peut être fait lorsque l'entrée ne comporte qu'un seul caractère, mais si vous le faites avec plusieurs entrées telles que les 2e, 3e et 4e lignes, une erreur sera générée. Donc, si vous en avez plus d'un, utilisez split () pour les séparer. Je suis très reconnaissant que l'utilisation de split le traite en le séparant par des espaces. Si vous utilisez split, il reviendra sous forme de liste. Par conséquent, cela ne peut pas être converti avec int () tel quel. Il existe deux méthodes, l'une consiste à utiliser l'instruction for pour convertir chaque caractère en int et l'autre à utiliser la fonction map. Personnellement, la fonction de carte est plus belle.
input.py
import sys
input = sys.stdin.readline
hogehoge = [int(i) for i in input().rstrip().split()]
#Si vous utilisez la carte
hogehoge = list(map(int, input().rstrip().split()))
Je me sens comme cela. Vous pouvez maintenant obtenir ce que vous avez tapé sous forme de liste. Cependant, il y a des moments où vous ne voulez pas tout mettre dans la liste. Parfois, vous souhaitez obtenir deux entrées avec deux variables. Dans un tel cas, faites-le comme ceci.
input.py
import sys
input = sys.stdin.readline
a, b = map(int, input().rstrip().split())
Si vous faites cela, vous pouvez même affecter à une variable. Pour ceux qui y sont plus habitués, le processus de retour avec list est écrit en lambda pour le simplifier. Veuillez jeter un œil au code source des autres.
J'ai personnellement eu des problèmes avec l'entrée standard, alors je l'ai résumé. Je suis désolé si je fais une erreur. C'est difficile à résoudre au début, mais c'est amusant quand on peut le résoudre. Profitez d'une programmation compétitive!
Recommended Posts