結果
| 問題 |
No.1170 Never Want to Walk
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-10-01 18:19:53 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 3,535 bytes |
| コンパイル時間 | 3,055 ms |
| コンパイル使用メモリ | 11,904 KB |
| 実行使用メモリ | 10,624 KB |
| 最終ジャッジ日時 | 2025-10-01 18:20:07 |
| 合計ジャッジ時間 | 14,337 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 25 TLE * 1 -- * 11 |
ソースコード
# 入力の受け取り
N, A, B = map(int, input().split())
station_coords = list(map(int, input().split()))
# グループ(連結成分)を管理するリスト
groups = []
# 各駅の座標がどのグループに属しているかを高速に引くための辞書
# {駅の座標: groupsのインデックス} という形で格納する
station_to_group_idx = {}
# 1つずつ駅を処理していく
for i, current_station in enumerate(station_coords):
# この駅が接続する可能性のある、既存のグループのインデックスを格納する集合
# 集合(set)を使うことで、重複なくインデックスを管理できる
connected_group_indices = set()
# この駅より手前にある全ての駅との接続を調べる
for j in range(i):
prev_station = station_coords[j]
distance = current_station - prev_station
# 接続条件を満たす場合
if A <= distance <= B:
# 接続先の駅が属するグループのインデックスを取得し、集合に追加
group_idx = station_to_group_idx[prev_station]
connected_group_indices.add(group_idx)
# --- 接続判定後のグループ分け処理 ---
# 1. どの既存グループとも接続しなかった場合
if not connected_group_indices:
# 新しいグループを作成し、リストの末尾に追加
new_group_idx = len(groups)
groups.append([current_station])
station_to_group_idx[current_station] = new_group_idx
# 2. 1つ以上の既存グループと接続した場合
else:
# 接続したグループを全て1つに統合(マージ)する
# 統合のベースとなるグループを決め、新しい駅を追加する
# (ソートして一番若いインデックスのグループをベースにするのが分かりやすい)
sorted_indices = sorted(list(connected_group_indices))
target_group_idx = sorted_indices[0]
groups[target_group_idx].append(current_station)
station_to_group_idx[current_station] = target_group_idx
# 残りのグループをベースとなるグループに統合していく
# (インデックスが大きい順に処理すると、リストから削除する際に安全)
for idx_to_merge in sorted_indices[1:][::-1]:
# 統合されるグループを取り出す
group_to_merge = groups.pop(idx_to_merge)
# ベースのグループに要素を追加
groups[target_group_idx].extend(group_to_merge)
# 辞書の情報も更新する必要があるが、削除でインデックスがずれるため
# この後のループで辞書を再構築する
# グループの削除によってインデックスがずれた可能性があるので、
# 辞書(station_to_group_idx)を現在のgroupsの状態に合わせて再構築する
# (少し非効率だが、ロジックをシンプルで安全に保つため)
station_to_group_idx = {}
for idx, group in enumerate(groups):
for station in group:
station_to_group_idx[station] = idx
# --- 結果の出力 ---
results = {} # 各駅の答えを保持するための辞書
for group in groups:
group_len = len(group)
for station in group:
results[station] = group_len
for station in station_coords:
print(results[station])