complete 4674.rs 9912.rs 10826.rs 12140.rs 14452.rs 17021.rs 17386.rs 20929.rs
This commit is contained in:
68
storage/zeta/rs/completed/17386.rs
Normal file
68
storage/zeta/rs/completed/17386.rs
Normal file
@@ -0,0 +1,68 @@
|
||||
use std::io::{read_to_string, stdin};
|
||||
|
||||
pub struct Point {
|
||||
x: f64,
|
||||
y: f64,
|
||||
}
|
||||
|
||||
pub struct Line {
|
||||
p1: Point,
|
||||
p2: Point,
|
||||
}
|
||||
|
||||
fn ccw(p1: &Point, p2: &Point, p3: &Point) -> i32 {
|
||||
let k = (p1.y - p2.y) * (p2.x - p3.x) - (p1.x - p2.x) * (p2.y - p3.y);
|
||||
|
||||
if k > 0.0 {
|
||||
1
|
||||
} else if k < 0.0 {
|
||||
-1
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
|
||||
fn check_intersect(l1: &Line, l2: &Line) -> bool {
|
||||
let c1 = ccw(&l1.p1, &l1.p2, &l2.p1) * ccw(&l1.p1, &l1.p2, &l2.p2);
|
||||
let c2 = ccw(&l2.p1, &l2.p2, &l1.p1) * ccw(&l2.p1, &l2.p2, &l1.p2);
|
||||
|
||||
if c1 <= 0 && c2 <= 0 {
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let temp = read_to_string(stdin()).unwrap();
|
||||
let mut iter = temp
|
||||
.split_ascii_whitespace()
|
||||
.map(|x| x.parse::<f64>().unwrap());
|
||||
|
||||
let l1 = {
|
||||
Line {
|
||||
p1: Point {
|
||||
x: iter.next().unwrap(),
|
||||
y: iter.next().unwrap(),
|
||||
},
|
||||
p2: Point {
|
||||
x: iter.next().unwrap(),
|
||||
y: iter.next().unwrap(),
|
||||
},
|
||||
}
|
||||
};
|
||||
let l2 = {
|
||||
Line {
|
||||
p1: Point {
|
||||
x: iter.next().unwrap(),
|
||||
y: iter.next().unwrap(),
|
||||
},
|
||||
p2: Point {
|
||||
x: iter.next().unwrap(),
|
||||
y: iter.next().unwrap(),
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
println!("{}", check_intersect(&l1, &l2) as u8);
|
||||
}
|
||||
Reference in New Issue
Block a user