From 4c328453340cfe73b1c6eaca24c1b1fefc9d0c0c Mon Sep 17 00:00:00 2001 From: yenru0 Date: Sun, 22 Jun 2025 03:21:37 +0900 Subject: [PATCH] complete 1004.rs --- storage/zeta/rs/completed/1004.rs | 72 +++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 storage/zeta/rs/completed/1004.rs diff --git a/storage/zeta/rs/completed/1004.rs b/storage/zeta/rs/completed/1004.rs new file mode 100644 index 0000000..56659fe --- /dev/null +++ b/storage/zeta/rs/completed/1004.rs @@ -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::().unwrap(), + iter.next().unwrap().parse::().unwrap(), + iter.next().unwrap().parse::().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::().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::().unwrap(), + iter.next().unwrap().parse::().unwrap(), + ); + let pos_end = ( + iter.next().unwrap().parse::().unwrap(), + iter.next().unwrap().parse::().unwrap(), + ); + line.clear(); + std::io::stdin().read_line(&mut line).unwrap(); + let n = line.trim().parse::().unwrap(); + line.clear(); + let circles = (0..n) + .map(|_| { + std::io::stdin().read_line(&mut line).unwrap(); + split_by_3(&mut line) + }) + .collect::>(); + + println!( + "{}", + get_minimum_boundary_access(pos_start, pos_end, circles) + ); + } +}