結果
| 問題 |
No.1170 Never Want to Walk
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-10-07 19:01:16 |
| 言語 | JavaScript (node v23.5.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,376 bytes |
| コンパイル時間 | 342 ms |
| コンパイル使用メモリ | 7,720 KB |
| 実行使用メモリ | 62,368 KB |
| 最終ジャッジ日時 | 2025-10-07 19:01:26 |
| 合計ジャッジ時間 | 7,281 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 1 |
| other | WA * 37 |
ソースコード
const N = 5; // 駅数
const A = 4; // 距離の下限
const B = 6; // 距離の上限
const xi = [0, 2, 5, 7, 8]; // 駅の座標(昇順)
// --- メインロジック ---
// 連結成分(同じ線路グループ)を管理する二次元配列
// Python: linelist = [[xi[0]]]
let linelist = [[xi[0]]];
// 2番目以降の各駅についてループ
// Python: for i in range(1, N):
for (let i = 1; i < N; i++) {
// Pythonのfor...else文を再現するためのフラグ
let isConnected = false;
// 現在の駅iより手前にある駅jをすべてチェック
// Python: for j in range(i):
for (let j = 0; j < i; j++) {
const distance = xi[i] - xi[j];
// 駅iと駅jが接続できるか判定
// Python: if A <= xi[i]-xi[j] and xi[i]-xi[j] <= B:
if (A <= distance && distance <= B) {
// 接続先の駅jがどの線路グループに属しているか探す
// Python: for k, sublist in enumerate(linelist): ...
const k = linelist.findIndex(sublist => sublist.includes(xi[j]));
// 駅iが、j以外の手前の駅(rest)とも接続するかチェックし、必要なら線路グループを統合する
// Python: for rest in range(j+1, i): ...
// (注: この部分は元コードのロジックが複雑なため、より安全なマージ方法で再現)
let indicesToMerge = new Set([k]);
for (let rest = j + 1; rest < i; rest++) {
const restDistance = xi[i] - xi[rest];
if (A <= restDistance && restDistance <= B) {
const l = linelist.findIndex(sublist => sublist.includes(xi[rest]));
if (l !== -1) {
indicesToMerge.add(l);
}
}
}
// 複数のグループと接続する場合、それらを1つに統合する
if (indicesToMerge.size > 1) {
const mainIndex = Math.min(...indicesToMerge); // 統合先のグループ
let mergedGroup = [];
// 統合対象のグループをすべて mainIndex にまとめる
const newLinelist = [];
linelist.forEach((group, index) => {
if (indicesToMerge.has(index)) {
mergedGroup.push(...group);
} else {
newLinelist.push(group);
}
});
newLinelist.splice(mainIndex, 0, mergedGroup); // 統合したグループを元の位置に挿入
linelist = newLinelist;
}
// 最後に、現在の駅iを該当のグループに追加する
const finalK = linelist.findIndex(sublist => sublist.includes(xi[j]));
linelist[finalK].push(xi[i]);
isConnected = true; // 接続されたことを記録
break; // 駅iの接続先が1つ見つかったので、jのループを抜ける
}
}
// ループを最後まで回っても接続先が見つからなかった場合
// Python: for...else:
if (!isConnected) {
// 新しい線路グループとして追加
linelist.push([xi[i]]);
}
}
// --- 出力部分 ---
// 各駅について、所属するグループの駅の数を出力
// Python: for i in range(N): ...
for (let i = 0; i < N; i++) {
// 駅xi[i]が含まれるグループを探す
const component = linelist.find(sublist => sublist.includes(xi[i]));
// グループの長さを出力
console.log(component.length);
}