3499. 回家咯

deerbean

稍稍注意一下 int 和 double 的混合运算,基本功不扎实真的很致命。

Fifnmar

这题的确很水……就是解一个方程组并限制一下约束条件而已。

  • 设 Xiamen 到 中转 距离 a;
  • 设 中转 到 XJJ 距离 c;
  • 设 中转 到 OXX 距离 b;

$$\begin{cases}
x = a + b \
y = a + c \
z = y + b + c \
\end{cases}
$$

约束条件是:

$$\begin{cases}
a > 0 \
b > 0 \
c > 0 \
\end{cases}
$$

由于b、c是无关变量,我们希望把它们化成别的变量,即:

$$\begin{cases}
a > 0 \
x > a \
y > a \
\end{cases}
$$

满足上面这组约束条件时,输出:

$$a = y + \frac{x-z}{2}$$

下面是 C 语言代码:

#include <stdio.h>

int main() {
    int x, y, z;
    scanf("%d%d%d", &x, &y, &z);
    double a = y + (x - z) / 2.0;
    if (a > 0 && x > a && y > a)
        printf("%lf\n", a);
    else
        printf("Wrong\n");
}

顺便码一个rust:

fn main() {
    use std::io;
    use std::io::Read;
    let mut buf = String::new();
    io::stdin().lock().read_to_string(&mut buf).unwrap();
    let mut buf = buf.split_whitespace();
    let x: f64 = buf.next().unwrap().parse().unwrap();
    let y: f64 = buf.next().unwrap().parse().unwrap();
    let z: f64 = buf.next().unwrap().parse().unwrap();
    let a = y + (x - z) / 2.0;
    if a > 0.0 && x > a && y > a {
        println!("{}", a);
    } else {
        println!("Wrong");
    }
}

吐槽一下rust的异常安全机制……在OJ题的方面上写起来就啰嗦许多。

DeadCrow

坑爹呢。。。没想到是大写的W!害我提交了好几次!!!

你当前正在回复 博客/题目
存在问题!