10989-ソート番号3


これは思想の枠組みを転換しなければ解決できない問題である.

問題はヒントがあり、ソート数列1,2の問題は
「より効率的なソートアルゴリズムの使用方法」についての質問なら、今回の質問は
「こんな方法で考えることもできる」という感じです.
まずpythonを練習するためにpythonを使ってみます.コミットされたコードは2番目の問題のコードと同じです.
import sys
n = int(input())
l = []
for i in range(n):
    l.append(int(sys.stdin.readline()))
for i in sorted(l):
    sys.stdout.write(str(i)+'\n')
stdinとstdoutを使用してメモリの使用を最大限に減らそうとしたが、結果は失敗した.実際,この問題は,どんなソートアルゴリズムを用いてもタイムアウトするように設計されている.これはNの個数が1000000個であるためである.
そのため、他の接近が必要であり、幸いなことに、与えられた数字は10000以下の自然数である.
答えは簡単です.でも想像しにくいです.
まず、宣言はできるだけ多くの自然数の配列をマークすることができます.
そして、1つの数字を読むたびに、対応するインデックスにカウントされます.
その結果、10000個未満の自然数をカウントする配列が完了し、その配列のインデックスの個数に従ってインデックスが出力されると成功します.
import sys
n = int(sys.stdin.readline())
l = [0]*10001

for i in range(n):
    l[int(sys.stdin.readline())] +=1

for i in range(10001):
    if l[i] != 0:
        for answer in range(0,l[i]):
            sys.stdout.write(str(i)+'\n')
発想転換を求める問題なので新鮮です.