complete 1004.rs
This commit is contained in:
72
storage/zeta/rs/completed/1004.rs
Normal file
72
storage/zeta/rs/completed/1004.rs
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
fn split_by_3(line: &mut String) -> (i32, i32, i32) {
|
||||||
|
let mut iter = line.split_ascii_whitespace();
|
||||||
|
let p = (
|
||||||
|
iter.next().unwrap().parse::<i32>().unwrap(),
|
||||||
|
iter.next().unwrap().parse::<i32>().unwrap(),
|
||||||
|
iter.next().unwrap().parse::<i32>().unwrap(),
|
||||||
|
);
|
||||||
|
|
||||||
|
line.clear();
|
||||||
|
|
||||||
|
p
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_minimum_boundary_access(
|
||||||
|
start: (i32, i32),
|
||||||
|
end: (i32, i32),
|
||||||
|
circles: Vec<(i32, i32, i32)>,
|
||||||
|
) -> usize {
|
||||||
|
circles
|
||||||
|
.iter()
|
||||||
|
.map(|c| {
|
||||||
|
let (x, y, r) = c;
|
||||||
|
|
||||||
|
let dis_s_sq = (start.0 - x).pow(2) + (start.1 - y).pow(2);
|
||||||
|
let dis_e_sq = (end.0 - x).pow(2) + (end.1 - y).pow(2);
|
||||||
|
|
||||||
|
let flag1 = r.pow(2) > dis_s_sq;
|
||||||
|
let flag2 = r.pow(2) > dis_e_sq;
|
||||||
|
|
||||||
|
if (flag1 && !flag2) || (flag2 && !flag1) {
|
||||||
|
1
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.sum()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut line = String::new();
|
||||||
|
std::io::stdin().read_line(&mut line).unwrap();
|
||||||
|
let t = line.trim().parse::<usize>().unwrap();
|
||||||
|
line.clear();
|
||||||
|
|
||||||
|
for _ in 0..t {
|
||||||
|
std::io::stdin().read_line(&mut line).unwrap();
|
||||||
|
let mut iter = line.split_ascii_whitespace();
|
||||||
|
let pos_start = (
|
||||||
|
iter.next().unwrap().parse::<i32>().unwrap(),
|
||||||
|
iter.next().unwrap().parse::<i32>().unwrap(),
|
||||||
|
);
|
||||||
|
let pos_end = (
|
||||||
|
iter.next().unwrap().parse::<i32>().unwrap(),
|
||||||
|
iter.next().unwrap().parse::<i32>().unwrap(),
|
||||||
|
);
|
||||||
|
line.clear();
|
||||||
|
std::io::stdin().read_line(&mut line).unwrap();
|
||||||
|
let n = line.trim().parse::<usize>().unwrap();
|
||||||
|
line.clear();
|
||||||
|
let circles = (0..n)
|
||||||
|
.map(|_| {
|
||||||
|
std::io::stdin().read_line(&mut line).unwrap();
|
||||||
|
split_by_3(&mut line)
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"{}",
|
||||||
|
get_minimum_boundary_access(pos_start, pos_end, circles)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user