結果

問題 No.3680 セグメント釣り
コンテスト
ユーザー cacampu
提出日時 2026-09-05 14:28:41
言語 Rust
(1.97.1 + proconio + num + itertools)
コンパイル:
/usr/bin/rustc_custom
実行:
./target/release/main
結果
AC  
実行時間 35 ms / 2,000 ms
+ 554µs
コード長 1,174 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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);
    }
}

0