結果
| 問題 | No.1170 Never Want to Walk |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-10-30 08:10:44 |
| 言語 | Fix (1.6.0 + cp-library + minilib) |
| 結果 |
AC
不安定
|
| 実行時間 | 17 ms / 2,000 ms |
| + 457µs | |
| コード長 | 1,057 bytes |
| 記録 | |
| コンパイル時間 | 14,319 ms |
| コンパイル使用メモリ | 670,748 KB |
| 実行使用メモリ | 9,904 KB |
| 最終ジャッジ日時 | 2026-10-30 12:59:01 |
| 合計ジャッジ時間 | 18,757 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge3_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 = *range(0, n).fold_m(uf, |i, uf|
let (uf, grps) = uf.get_group_size(i);
grps.to_string.println;;
uf.pure
);
pure()
);