contests/arc051/arc051_a.rs (41 lines of code) (raw):
#![allow(non_snake_case)]
use libm::{acos, sin};
use proconio::{fastout, input};
fn in_circle(x: isize, y: isize, x1: isize, y1: isize, r: isize) -> bool {
if x > x1 + r || x < x1 - r {
return false;
}
let seata = acos(x as f64 / r as f64);
let y_max_of_circle = (y1 + r) as f64 * sin(seata);
let y_min_of_circle = (y1 + r) as f64 * sin(-seata);
if y_max_of_circle >= y as f64 && y_min_of_circle <= y as f64 {
return true;
}
return false;
}
#[fastout]
fn main() {
input! {
x1: isize,
y1: isize,
r: isize,
x2: isize,
y2: isize,
x3: isize,
y3: isize
}
if x1 - r >= x2 && x1 + r <= x3 && y1 - r >= y2 && y1 + r <= y3 {
println!("NO");
} else {
println!("YES");
}
if in_circle(x2, y2, x1, y1, r)
&& in_circle(x3, y2, x1, y1, r)
&& in_circle(x2, y3, x1, y1, r)
&& in_circle(x3, y3, x1, y1, r)
{
println!("NO");
} else {
println!("YES");
}
}
// https://atcoder.jp/contests/arc051/tasks/arc051_a
// 未完