J'ai essayé de résumer ce que l'homme fort de python fait dans le quartier des professionnels de la compétition

Ravi de vous rencontrer. Je suis un débutant qui a commencé la compétition pro la semaine dernière. J'utilise python maintenant.

Si possible, je souhaite obtenir de bons résultats chez les pros de la compétition sans me fier au C ++! J'ai donc réfléchi à la façon d'augmenter le score avec python.

Par exemple en C ++

#define rep(i,n) for((i)=0;(i)<(int)(n);(i)++)

Il y a beaucoup de gens qui accélèrent comme ça. En bref, cela ressemble à simplifier les descriptions fréquemment utilisées. Je savais d'avant qu'il y avait une telle coutume magique.

Cependant, je ne connais pas la version python de cela même si je fais un pro de la concurrence avec python.

J'ai donc écrit cet article avec l'intention d'apprendre les coutumes des grands professionnels de la concurrence de python. J'espère que cela sera utile à des personnes similaires.

Ce que j'ai fait en premier

J'ai lu le code de soumission d'une personne forte. Après tout, il y avait une magie similaire à C ++ competition pro, donc je vais essayer de la déchiffrer. (Cité par une certaine personne forte)

Code réel

Je vais expliquer le code réel dans l'ordre.

sys.setrecursionlimit(10 ** 6)

Définit la profondeur récursive de la fonction récursive. (la valeur par défaut est 1000) Je comprends le sens, mais la nécessité ne me vient pas à l'esprit.

Quand je l'ai recherché, il semble que cela puisse se faire prendre, alors j'ai envie de le régler plus grand pour le moment. Certes, lorsqu'une erreur se produit à cause de cela, cela semble difficile à remarquer.

Ensuite, j'ai trouvé quelque chose comme ça.

int1 = lambda x: int(x) - 1

Une fonction qui renvoie le nombre saisi moins un. Je me demande si c'est le cas ... je ressens l'obsession d'une forte compétition professionnelle lol

Lié à la sortie

p2D = lambda x: print(*x, sep="\n")

Une fonction qui affiche les éléments d'une liste avec un saut de ligne. Certes, quand j'ai fait Atcoder l'autre jour, il y avait une bonne scène avec ce lol

Lié à l'entrée

#Convertir l'entrée en entier et recevoir
def II(): return int(sys.stdin.readline())

def MI(): return map(int, sys.stdin.readline().split())
def MI1(): return map(int1, sys.stdin.readline().split())

#Reçoit un tableau de toutes les entrées converties en entiers
def LI(): return list(map(int, sys.stdin.readline().split()))
#Reçoit un tableau de toutes les entrées converties en nombres entiers moins 1
def LLI(rows_number): return [LI() for _ in range(rows_number)]

En tant que débutant, j'ai utilisé uniquement input (), donc commencez par trier les différences par rapport à readline ().

--readline () lit également le caractère de saut de ligne de fin --input () efface le caractère de saut de ligne lu (c'est-à-dire la même valeur que readline (). Rstrip ())

Cependant, puisque int ('1 \ n') = 1, il peut être décrit comme ceci. La personne citée utilise readline () comme ceci, mais input () semble être un substitut.

Bibliothèques couramment utilisées

Ensuite, j'ai essayé d'identifier les bibliothèques fréquemment utilisées.

Lié à la séquence

Étant donné que le pop et l'ajout de tableaux sont lents en python, si la réponse est incorrecte en raison du temps d'exécution, écrivez comme suit et utilisez le pont (les deux extrémités de la file d'attente).

from collections import deque
l = deque
l.append(1)
l.pop()

La prochaine histoire sur la duplication d'un tableau

#Si le tableau est unidimensionnel
list2 = list1[:]
#Pour 2 dimensions ou plus
import copy
list2 = copy.deepcopy(list1)

Dans le cas d'une dimension, si "list2 = list1" est défini, list1 sera également réécrit si list2 lui-même est réécrit en raison du passage par référence, alors écrivez-le comme ceci. Dans le cas de 2 dimensions ou plus, la copie profonde est utilisée car elle ne peut pas être décrite comme ceci.

Structure de données

Les tas (files d'attente prioritaires) sont souvent utilisés chez les pros de la compétition. (Par exemple, lors de la recherche de la valeur médiane) Le tas a les propriétés suivantes

La spécification est telle que la valeur minimale arrive à l'apex, donc si vous voulez amener la valeur maximale à l'apex, multipliez-la par -1 et enregistrez-la dans le tas.

Vous pouvez gérer le tas comme suit.

import heapq
heap = []
heapq.heappush(heap, 1)
heapq.heappop(heap)

dictionnaire

Lors de l'utilisation d'un dictionnaire normal avec python, il est nécessaire de vérifier si la valeur correspondant à la clé existe. Le dict par défaut vous évite de tels problèmes. (J'ai l'impression qu'il y a beaucoup de situations où je l'utilise même si je ne suis pas un professionnel de la compétition)

Utilisez comme suit

from collections import defaultdict
d = defaultdict(int)
#Pour définir la valeur par défaut lorsqu'il n'y a pas de clé, écrivez comme ceci
d = defaultdict(lambda : 'Initial Value')

Résumé

Je pense que c'est à peu près comme ça, mais je pense qu'il y a encore beaucoup de choses qui manquent, donc je prévois de le mettre à jour de temps en temps. Je crois que ce genre de connaissances sera utile dans la pratique un jour, et je continuerai à étudier.

Recommended Posts

J'ai essayé de résumer ce que l'homme fort de python fait dans le quartier des professionnels de la compétition
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé de résumer comment utiliser les pandas de python
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de résumer les nouvelles personnes infectées par le virus corona dans la ville d'Ichikawa, préfecture de Chiba
J'ai essayé de résumer le code souvent utilisé dans Pandas
J'ai essayé de résumer les commandes souvent utilisées en entreprise
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé de résumer la commande umask
J'ai essayé d'implémenter la permutation en Python
J'ai essayé d'implémenter PLSA dans Python 2
Entrée standard Python3 que j'ai essayé de résumer
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
J'ai essayé de résumer le contenu de chaque paquet enregistré par Python pip en une seule ligne
[Chez Coder] Ce que j'ai fait pour atteindre le rang vert en Python
J'ai essayé de résumer les méthodes qui sont souvent utilisées lors de l'implémentation d'algo de base dans Quantx Factory
J'ai essayé de résumer tous les graphiques Python utilisés dans la recherche par des étudiants diplômés en sciences actifs [Basique]
J'ai essayé de simuler "Birthday Paradox" avec Python
J'ai essayé la méthode des moindres carrés en Python
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé d'implémenter le tri sélectif en python
LeetCode j'ai essayé de résumer les plus simples
Je veux afficher la progression en Python!
Je veux visualiser où et combien de personnes se trouvent dans l'usine
J'ai essayé de résumer les opérations susceptibles d'être utilisées avec numpy-stl
J'ai essayé d'implémenter ce qui semble être un outil de snipper Windows avec Python
J'ai essayé de résumer tous les outils de visualisation Python utilisés dans la recherche par des étudiants diplômés en sciences actifs [Application]
J'ai essayé de résumer comment utiliser matplotlib de python
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai essayé d'implémenter le poker de Drakue en Python
J'ai essayé d'implémenter GA (algorithme génétique) en Python
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
Je veux écrire en Python! (3) Utiliser des simulacres
J'ai essayé de résoudre le problème avec Python Vol.1
Je veux utiliser le jeu de données R avec python
Python Open CV a essayé d'afficher l'image sous forme de texte.
[LPIC 101] J'ai essayé de résumer les options de commande qui sont faciles à faire une erreur
[Série pour les gens occupés] J'ai essayé de résumer avec une analyse de syntaxe pour appeler les actualités en 30 secondes
[Pour les professionnels de la compétition débutants] J'ai essayé de résoudre 40 questions AOJ "ITP I" avec python
[Python] J'ai essayé de résumer le tableau, la méthode de génération du dictionnaire, la méthode de boucle, la notation d'inclusion de liste
J'ai essayé de créer une fonction pour juger si les principaux stocks du monde sont l'heure d'été avec python
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de simuler la propagation de l'infection avec Python
[Première API COTOHA] J'ai essayé de résumer l'ancienne histoire
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
Ce que j'ai fait pour accueillir le Python2 EOL en toute confiance
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai essayé d'illustrer le temps et le temps du langage C
J'ai essayé de programmer le test du chi carré en Python et Java.
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
Ce qui semble être un modèle pour la partie d'entrée standard du pro de la concurrence en python3