AtCoder Beginner Contest 51 C問題

atcoder.jp

最短経路はいくつかありうるが、 - 1回目はx, yの座標差分だけ移動 - 2回目は1回目を迂回するように、x, yの座標差+2の距離ずつ移動する ようにすればよい。

迂回の仕方はいろいろあるが、1パターンだけでいいので以下の経路でコーディングする。

f:id:ofton_queen:20220411215545j:plain

use proconio::input;

fn main() {
    input! {
        sx: i32,
        sy: i32,
        tx: i32,
        ty: i32,
    };

    let dx = (tx - sx) as usize;
    let dy = (ty - sy) as usize;

    // 1
    print!("{}", "U".repeat(dy));
    print!("{}", "R".repeat(dx));
    print!("{}", "D".repeat(dy));
    print!("{}", "L".repeat(dx));

    // 2
    print!("L");
    print!("{}", "U".repeat(dy + 1));
    print!("{}", "R".repeat(dx + 1));
    print!("DR");
    print!("{}", "D".repeat(dy + 1));
    print!("{}", "L".repeat(dx + 1));
    println!("U");

}

Submission #30898620 - AtCoder Beginner Contest 051

  • .repeatの存在を初めて知ったので覚えておく。
  • Rustはusize型と数値型の変換が面倒なので良い書き方を覚えたい。