結果
| 問題 | No.3680 セグメント釣り |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-05 14:28:41 |
| 言語 | Rust (1.97.1 + proconio + num + itertools) |
| 結果 |
AC
|
| 実行時間 | 35 ms / 2,000 ms |
| + 554µs | |
| コード長 | 1,174 bytes |
| 記録 | |
| コンパイル時間 | 11,519 ms |
| コンパイル使用メモリ | 192,432 KB |
| 実行使用メモリ | 9,732 KB |
| 最終ジャッジ日時 | 2026-09-05 14:29:22 |
| 合計ジャッジ時間 | 9,261 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 13 |
ソースコード
use std::mem::swap;
use proconio::{fastout, input};
#[fastout]
fn main() {
input! {
t: usize,
cases: [(usize,usize,usize,usize); t],
}
let idx = |x: usize, y: usize| (y, x / (1 << (y.min(60))));
for (sx, sy, tx, ty) in cases {
let (mut l, mut r) = (idx(sx, sy), idx(tx, ty));
if sx > tx {
swap(&mut l, &mut r);
}
let mut tmp = 0;
let mut ans = usize::MAX;
while l.0 != r.0 {
if l.1 == 0 && r.1 == 0 {
tmp += l.0.abs_diff(r.0);
let m = l.0.max(r.0);
l = (m, 0);
r = (m, 0);
break;
}
if l.0 < r.0 {
l = (l.0 + 1, l.1 / 2);
} else {
r = (r.0 + 1, r.1 / 2);
}
tmp += 1;
}
while l != r {
if l.1 == 0 && r.1 == 0 {
break;
}
ans = ans.min(tmp + l.1.abs_diff(r.1));
l = (l.0 + 1, l.1 / 2);
r = (r.0 + 1, r.1 / 2);
tmp += 2;
}
ans = ans.min(tmp);
println!("{}", ans);
}
}