結果

問題 No.859 路線A、路線B、路線C
ユーザー fukafukatanifukafukatani
提出日時 2019-08-09 22:40:20
言語 Rust
(1.77.0)
結果
AC  
実行時間 1 ms / 1,000 ms
コード長 2,572 bytes
コンパイル時間 692 ms
コンパイル使用メモリ 140,876 KB
実行使用メモリ 4,384 KB
最終ジャッジ日時 2023-09-26 20:54:59
合計ジャッジ時間 1,574 ms
ジャッジサーバーID
(参考情報)
judge11 / judge15
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,380 KB
testcase_01 AC 1 ms
4,376 KB
testcase_02 AC 1 ms
4,376 KB
testcase_03 AC 1 ms
4,376 KB
testcase_04 AC 1 ms
4,376 KB
testcase_05 AC 1 ms
4,380 KB
testcase_06 AC 1 ms
4,376 KB
testcase_07 AC 1 ms
4,384 KB
testcase_08 AC 1 ms
4,380 KB
testcase_09 AC 1 ms
4,380 KB
testcase_10 AC 1 ms
4,376 KB
testcase_11 AC 1 ms
4,376 KB
testcase_12 AC 1 ms
4,376 KB
testcase_13 AC 1 ms
4,380 KB
testcase_14 AC 1 ms
4,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#![allow(unused_imports)]
#![allow(non_snake_case)]
use std::cmp::*;
use std::collections::*;
use std::io::Write;

#[allow(unused_macros)]
macro_rules! debug {
    ($($e:expr),*) => {
        #[cfg(debug_assertions)]
        $({
            let (e, mut err) = (stringify!($e), std::io::stderr());
            writeln!(err, "{} = {:?}", e, $e).unwrap()
        })*
    };
}

fn main() {
    let v = read_vec::<i64>();
    let (x, y, z) = (v[0], v[1], v[2]);
    let s0 = read_vec::<String>();
    let mut t0: i64 = s0[1].parse().ok().unwrap();
    let s0 = &s0[0];

    let s1 = read_vec::<String>();
    let mut t1: i64 = s1[1].parse().ok().unwrap();
    let s1 = &s1[0];

    let mut ans = std::i64::MAX;
    if s0 == s1 {
        ans = (t1 - t0).abs();
        if s0 == "A" {
            let temp = (min(t0, t1)) + (x + 1 - max(t1, t0));
            let temp = temp + min(y, z) - 1;
            ans = min(ans, temp);
        } else if s0 == "B" {
            let temp = (min(t0, t1)) + (y + 1 - max(t1, t0));
            let temp = temp + min(x, z) - 1;
            ans = min(ans, temp);
        } else {
            let temp = (min(t0, t1)) + (z + 1 - max(t1, t0));
            let temp = temp + min(x, y) - 1;
            ans = min(ans, temp);
        }
    } else {
        if (s0 == "A" && s1 == "B") || (s0 == "B" && s1 == "A") {
            if s0 == "B" {
                std::mem::swap(&mut t0, &mut t1);
            }
            ans = min(t0 + t1 - 1, (x - t0) + (y - t1) + 1);
            ans = min(ans, t0 + y - t1 + z);
            ans = min(ans, (x - t0) + t1 + z);
        } else if (s0 == "B" && s1 == "C") || (s0 == "C" && s1 == "B") {
            if s0 == "C" {
                std::mem::swap(&mut t0, &mut t1);
            }
            ans = min(t0 + t1 - 1, (y - t0) + (z - t1) + 1);
            ans = min(ans, t0 + z - t1 + x);
            ans = min(ans, (y - t0) + t1 + x);
        } else if (s0 == "A" && s1 == "C") || (s0 == "C" && s1 == "A") {
            if s0 == "C" {
                std::mem::swap(&mut t0, &mut t1);
            }
            ans = min(t0 + t1 - 1, (x - t0) + (z - t1) + 1);
            ans = min(ans, t0 + z - t1 + y);
            ans = min(ans, (x - t0) + t1 + y);
        }
    }
    println!("{}", ans);
}

fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>()
        .split_whitespace()
        .map(|e| e.parse().ok().unwrap())
        .collect()
}
0