結果
| 問題 | No.1170 Never Want to Walk |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-10-31 09:17:05 |
| 言語 | Fix (1.6.0 + cp-library + minilib) |
| 結果 |
AC
不安定
|
| 実行時間 | 14 ms / 2,000 ms |
| + 559µs | |
| コード長 | 1,127 bytes |
| 記録 | |
| コンパイル時間 | 12,378 ms |
| コンパイル使用メモリ | 670,296 KB |
| 実行使用メモリ | 9,864 KB |
| 最終ジャッジ日時 | 2026-10-31 09:17:31 |
| 合計ジャッジ時間 | 18,497 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 38 |
コンパイルメッセージ
make: 'lib.o' は更新済みです.
ソースコード
module Main;
import CPLib.IO;
import CPLib.UnionFind::{create, get_group_size, unite, UnionFind};
main : IO () = (
let (n, a, b) = (*read_i, *read_i, *read_i);
let xs = *read_is(n);
let uf = UnionFind::create(n);
let (uf, _, _) = range(0, n).fold((uf, 0, 0), |i, (uf, begin, end)|
let begin1 = loop(begin, |begin|
if begin >= n { n.break };
if xs.@(i) + a <= xs.@(begin) { begin.break };
(begin+1).continue
);
let end1 = loop(end, |end|
if end >= n { n.break };
if xs.@(i) + b < xs.@(end) { end.break };
(end+1).continue
);
let uf = if i == 0 || begin1 >= end {
range_step(begin1, end1, 1).fold(uf, |j, uf| uf.unite(i, j))
} else {
range_step(end-1, end1, 1).fold(uf, |j, uf| uf.unite(i, j))
};
(uf, begin1, end1)
);
let (uf, ans) = range(0, n).fold((uf, Array::empty(n)), |i, (uf, ans)|
let (uf, grps) = uf.get_group_size(i);
(uf, ans.push_back(grps))
);
"{}".printfln((ans.to_iter.joined_with("\n"),));;
pure()
);