fn main() { input!{ a: (f64, f64), b: (f64, f64), c: (f64, f64), d: (f64, f64), } let mut vec_val = Vec::new(); let ab = len_size(a, b); let cd = len_size(c, d); vec_val.push(ab*cd); let ad = len_size(a, d); let bc = len_size(b, c); vec_val.push(ad*bc); let ac = len_size(a, c); let bd = len_size(b, d); vec_val.push(ac*bd); vec_val.sort_by(|a, b| a.partial_cmp(b).unwrap()); println!("{}", if vec_val[0].sqrt() + vec_val[1].sqrt() == vec_val[2].sqrt() {"Yes"} else {"No"}); } fn len_size(a: (f64, f64), b: (f64, f64)) -> f64 { ((b.0-a.0)*(b.0-a.0) + (b.1-a.1)*(b.1-a.1)) } // const MOD17: usize = 1000000007; // const MOD93: usize = 998244353; // const INF: usize = 1 << 60; // let dx = vec![!0, 0, 1, 0]; // 上左下右 // let dy = vec![0, !0, 0, 1]; // 上左下右 // let d = vec!{(!0, 0), (0, !0), (1, 0), (0, 1)}; // 上左下右 #[allow(unused)] use proconio::{input, marker::Chars, marker::Usize1}; #[allow(unused)] use std::{ mem::swap, cmp::min, cmp::max, cmp::Reverse, collections::HashSet, collections::BTreeSet, collections::HashMap, collections::BTreeMap, collections::BinaryHeap, collections::VecDeque, iter::FromIterator, };