結果
| 問題 | No.1170 Never Want to Walk |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-26 21:56:46 |
| 言語 | Fix (1.6.0 + cp-library + minilib) |
| 結果 |
AC
不安定
|
| 実行時間 | 80 ms / 2,000 ms |
| + 965µs | |
| コード長 | 1,058 bytes |
| 記録 | |
| コンパイル時間 | 15,556 ms |
| コンパイル使用メモリ | 670,184 KB |
| 実行使用メモリ | 9,920 KB |
| 最終ジャッジ日時 | 2026-10-26 21:57:13 |
| 合計ジャッジ時間 | 17,897 ms |
|
ジャッジサーバーID (参考情報) |
judge7_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, ufe|
let (uf, grps) = uf.get_group_size(i);
grps.to_string.println;;
uf.pure
);
pure()
);