結果
問題 |
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()