[python/規格]10989:ソート番号3


質問する



に答える


この問題のメモリ制限が小さすぎてsortは使用できません.
また、for文では、inputを使用して数字を入力しても、メモリオーバーフローのために問題を通過することはできません.
したがって,sortではなくintputint(sys.stdin.readline())に置き換えることがこの問題の核心である.
問題にはN行の数字があり、この数字は10000以下です.では、0番目の配列を含む10001の長さの配列を宣言し、数字1が2つである場合、配列[1]=2を指定して、数字1を2回印刷するのがより効果的です.
コードを見ると分かりやすいです.

コード#コード#

import sys

N  = int(sys.stdin.readline())
arr = [0]*10001

for _ in range(N):
    num = int(sys.stdin.readline())
    arr[num] += 1 # arr[num]에 num이 들어온 개수 count 

for i in range(10001): 
	# arr[i]에 숫자가 들어왔다면 
    if arr[i] != 0:
    	# arr[num]에 num이 들어온 개수 만큼 출력 
        for j in range(arr[i]): 
            print(i)

後記



sortはpython 3よりpython 3の性能が優れていると考えている.
メモリ使用量pypy 3はpython 3より多い!
問題では、メモリの制限が低すぎてメモリが超過しています.
同じコードをpython 3に変換して通過しました.
時間:pypy 3>python 3
メモリ使用量:pypy 3