アルゴリズム11|年齢順


年齢順


バックアップ/ソート


質問する


ネット低地に加入した人の年齢と名前は加入順に与えられる.この場合は、年齢が上がる順に、年齢が同じなら、先に加入した人が前に来る順に、プログラムを作成してください.

入力


1行目はオンラインブロック会員数Nを与える.(1 ≤ N ≤ 100,000)
2行目からN行目では,各メンバの年齢と名前が空白に分割される.年齢は1以上、200以下の整数で、名前はアルファベットの大文字と小文字で構成され、長さは100以下の文字列です.入力は、追加する順序で与えられます.

しゅつりょく


最初の行からN行がオンラインで会員をブロックし、年齢順、年齢が同じなら加入順、1行1名で年齢と名前を空白に分けて印刷します.
import sys

n = int(sys.stdin.readline())
lst = [0]*n
for i in range(n):
    k = list(sys.stdin.readline().split())
    k.append(i)
    lst[i] = k

lst.sort(key=lambda x: (x[0], x[2]))

for j in lst:
    j.pop()
    print(*j)
最初の答え.
入力値sys.stdin.readline().split()は、1行に数字と文字が混ざっているため、文字列で受信せざるを得ない.これらを無視して並べ替えていくうちに、数値型に変わることなく並べ替えが行われ、誤った答えが出てきました.
最初は理由が分からず、2番目の位置の名前に対応する文字と加入順が違うと思って、入力を受けたときにインデックス値append()を与え、また加入順にソートしました.
問題に気づくのに長い時間がかかった.
import sys

n = int(sys.stdin.readline())
lst = [list(sys.stdin.readline().split()) for i in range(n)]

lst.sort(key=lambda x: (int(x[0])))

for j in range(n):
    print(lst[j][0], lst[j][1])
後で発見された簡単な解決策.