結果
| 問題 |
No.1635 Let’s Sort Integers!!
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-01-27 02:53:36 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 419 ms / 2,000 ms |
| コード長 | 3,464 bytes |
| コンパイル時間 | 181 ms |
| コンパイル使用メモリ | 82,904 KB |
| 実行使用メモリ | 226,388 KB |
| 最終ジャッジ日時 | 2025-01-27 02:54:03 |
| 合計ジャッジ時間 | 20,646 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 77 |
ソースコード
## https://yukicoder.me/problems/no/2255
from collections import deque
def main():
N, K = map(int, input().split())
n_min = N - 1
array1 = [i for i in range(2, N + 1)]
array2 = [i for i in reversed(range(2, N + 1))]
iter_array = []
i1 = 0
i2 = 0
for i in range(N - 1):
if i % 4 <= 1:
iter_array.append(array2[i2])
i2 += 1
else:
iter_array.append(array1[i1])
i1 += 1
# n_maxを求めるためにやる
queue = deque()
queue.append(1)
for n in iter_array:
l = abs(n - queue[0])
r = abs(n - queue[-1])
if l >= r:
queue.appendleft(n)
else:
queue.append(n)
n = queue.popleft()
ans = 0
while len(queue) > 0:
d = queue.popleft()
ans += abs(d - n)
n = d
n_max = ans
if not (n_min <= K <= n_max):
print(-1)
return
queue = deque()
queue.append(1)
used = [False] * (N + 1)
used[1] = True
for n in iter_array:
l = abs(n - queue[0])
r = abs(n - queue[-1])
if l > r:
if K >= l:
queue.appendleft(n)
used[n] = True
K -= l
else:
# 左でダメなら
is_ok = False
if n > queue[0]:
if not used[queue[0] + K]:
used[queue[0] + K] = True
queue.appendleft(queue[0] + K)
is_ok = True
else:
if not used[queue[0] - K]:
used[queue[0] - K] = True
queue.appendleft(queue[0] - K)
is_ok = True
if not is_ok:
if n > queue[-1]:
used[queue[-1] + K] = True
queue.append(queue[-1] + K)
else:
used[queue[-1] - K] = True
queue.append(queue[-1] - K)
K = 0
else:
if K >= r:
queue.append(n)
used[n] = True
K -= r
else:
is_ok = False
if n > queue[-1]:
if not used[queue[-1] + K]:
used[queue[-1] + K] = True
queue.append(queue[-1] + K)
is_ok = True
else:
if not used[queue[-1] - K]:
used[queue[-1] - K] = True
queue.append(queue[-1] - K)
is_ok = True
if not is_ok:
if n > queue[0]:
used[queue[0] + K] = True
queue.appendleft(queue[0] + K)
else:
used[queue[0] - K] = True
queue.appendleft(queue[0] - K)
K = 0
if K == 0:
break
answer = []
while queue[0] != 1:
answer.append(queue.popleft())
answer.append(queue.popleft())
for i in range(1 , N + 1):
if not used[i]:
answer.append(i)
while len(queue) > 0:
answer.append(queue.popleft())
print(" ".join(map(str, answer)))
if __name__ == "__main__":
main()