Puisque vous avez dit qu'il est une question de programmation compétitive cette solution fonctionnerait autrement il ne fonctionnera jamais car il a besoin beaucoup trop de mémoire et briserait dans les mauvais cas. Mais dans la programmation compétitive, les contraintes ne sont pas tellement et cela devrait fonctionner.
Nous ajoutons simplement le comparateur ie gt et lt méthodes qui décident de la comparaison entre les 2 objets.
class VeryBigNumber(object):
def __init__(self,number_string):
self.number = number_string
def __gt__(self,other):
if len(self.number)>len(other.number):
return True
elif len(self.number)<len(other.number):
return False
for i in xrange(min(len(self.number),len(other.number))):
if int(self.number[i])>int(other.number[i]):
return True
elif int(self.number[i])<int(other.number[i]):
return False
return False
def __eq__(self,other):
return self.number == other.number
def __lt__(self,other):
return not (self.__eq__(other) or self.__gt__(other))
arr = []
for i in xrange(n):
arr.append(VeryBigNumber(raw_input().strip())
arr = sorted(arr)
for a in arr:
print a.number,
Big Explication:
Dans les commentaires que vous avez dit qu'il est pour une compétition de codage. Cela nous assure que la mémoire est suffisamment petite pour que nous puissions lire en moins d'une seconde.
Nous ne convertissons pas une chaîne trop grande en nombre car cela serait inutile. Au lieu de cela, nous gardons la chaîne telle quelle.
Comment le trions-nous alors? Nous faisons notre propre classe et utilisons des comparaisons de chaînes.
Ils fonctionnent en comparant les chiffres de caractères entre les chaînes et ainsi, un seul caractère est converti en int à un moment très efficace.
J'ai testé le code ci-dessus et il fonctionne correctement
chiffres Combien de millions de chiffres avez-vous? –
2 * (10 ** 5) est le nombre de chiffres que j'ai besoin de trier. –
Eh bien, cela devrait être terminé en un clin d'œil, si vous avez assez de mémoire. Je devrais/deviner/la plupart du temps que vous rencontrez est passé dans le fichier i/o. S'il vous plaît faire un code postal (et un lien vers votre fichier de données, le cas échéant) que les lecteurs peuvent simplement copier et coller pour reproduire le problème. –