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