From 60471b15ab8279680057217cca890eadff4d5e5f Mon Sep 17 00:00:00 2001 From: yenru0 Date: Thu, 26 Jun 2025 06:46:43 +0900 Subject: [PATCH] complete 1644.rs 2887.rs 15552.rs 24767.rs 25710.rs 34031.rs --- storage/zeta/rs/completed/15552.rs | 24 +++++++ storage/zeta/rs/completed/1644.rs | 66 ++++++++++++++++++ storage/zeta/rs/completed/24767.rs | 49 ++++++++++++++ storage/zeta/rs/completed/25710.rs | 57 ++++++++++++++++ storage/zeta/rs/completed/2887.rs | 103 +++++++++++++++++++++++++++++ storage/zeta/rs/completed/34031.rs | 85 ++++++++++++++++++++++++ 6 files changed, 384 insertions(+) create mode 100644 storage/zeta/rs/completed/15552.rs create mode 100644 storage/zeta/rs/completed/1644.rs create mode 100644 storage/zeta/rs/completed/24767.rs create mode 100644 storage/zeta/rs/completed/25710.rs create mode 100644 storage/zeta/rs/completed/2887.rs create mode 100644 storage/zeta/rs/completed/34031.rs diff --git a/storage/zeta/rs/completed/15552.rs b/storage/zeta/rs/completed/15552.rs new file mode 100644 index 0000000..707e2f2 --- /dev/null +++ b/storage/zeta/rs/completed/15552.rs @@ -0,0 +1,24 @@ +use std::io::{stdin, stdout, BufWriter}; +use std::io::{BufRead, Write}; + +fn main() { + let stdout = stdout(); + let mut out = BufWriter::new(stdout.lock()); + + let mut line = String::new(); + stdin().read_line(&mut line).unwrap(); + let n: usize = line.trim_end().parse().unwrap(); + line.clear(); + for _ in 0..n { + stdin().read_line(&mut line).unwrap(); + let s = line + .trim_end() + .split_ascii_whitespace() + .map(|x| x.parse::().unwrap()) + .sum::(); + line.clear(); + + //println!("{}", s); + writeln!(out, "{}", s).unwrap(); + } +} diff --git a/storage/zeta/rs/completed/1644.rs b/storage/zeta/rs/completed/1644.rs new file mode 100644 index 0000000..62ea0d3 --- /dev/null +++ b/storage/zeta/rs/completed/1644.rs @@ -0,0 +1,66 @@ +use std::io::stdin; + +fn get_primes_upto(n: u32) -> Vec { + let mut primes = vec![2]; + for i in (3..=n).step_by(2) { + let mut flag = true; + for &p in primes.iter() { + if p > (i as f32).sqrt() as u32 { + break; + } + if i % p == 0 { + flag = false; + break; + } + } + if flag { + primes.push(i); + } + } + + primes +} + +fn get_ways_sum_primes(n: u32) -> usize { + let primes = get_primes_upto(n); + + let cumulative_primes: Vec = std::iter::once(0) + .chain(primes.iter().scan(0, |acc, &p| { + *acc += p; + Some(*acc) + })) + .collect(); + + let mut lo: usize = 0; + let mut hi: usize = 1; + + let mut ways: usize = 0; + + let get_sum = |lo: usize, hi: usize| cumulative_primes[hi] - cumulative_primes[lo]; + + while lo <= hi && lo < cumulative_primes.len() && hi < cumulative_primes.len() { + let s = get_sum(lo, hi); + if n == s { + ways += 1; + lo += 1; + } else if n > s { + hi += 1; + } else { + lo += 1; + } + } + + ways +} + +fn main() { + let n = stdin() + .lines() + .next() + .unwrap() + .unwrap() + .parse::() + .unwrap(); + + println!("{}", get_ways_sum_primes(n)); +} diff --git a/storage/zeta/rs/completed/24767.rs b/storage/zeta/rs/completed/24767.rs new file mode 100644 index 0000000..097a8b4 --- /dev/null +++ b/storage/zeta/rs/completed/24767.rs @@ -0,0 +1,49 @@ +use std::io::stdin; + +fn get_sour_sweet(d: f64, poses: Vec<(f64, f64)>) -> (usize, usize) { + let mut is_fight = vec![false; poses.len()]; + let d_pow = d * d; + for (i, p1) in poses.iter().enumerate() { + for (j, p2) in poses.iter().enumerate().skip(i + 1) { + if (p1.0 - p2.0).powf(2.0) + (p1.1 - p2.1).powf(2.0) <= d_pow { + is_fight[i] = true; + is_fight[j] = true; + } + } + } + + let fight_cnt = is_fight.iter().filter(|&&x| x).count(); + + (fight_cnt, poses.len() - fight_cnt) +} + +fn main() { + while true { + let mut line = String::new(); + stdin().read_line(&mut line).unwrap(); + let mut iter = line.split_ascii_whitespace(); + let d = iter.next().unwrap().parse::().unwrap(); + let n = iter.next().unwrap().parse::().unwrap(); + line.clear(); + + if (n == 0) { + break; + } + + let poses: Vec<(f64, f64)> = (0..n) + .map(|_| { + stdin().read_line(&mut line).unwrap(); + let mut iter = line.split_ascii_whitespace(); + let t = ( + iter.next().unwrap().parse::().unwrap(), + iter.next().unwrap().parse::().unwrap(), + ); + line.clear(); + t + }) + .collect(); + let res = get_sour_sweet(d, poses); + + println!("{} sour, {} sweet", res.0, res.1); + } +} diff --git a/storage/zeta/rs/completed/25710.rs b/storage/zeta/rs/completed/25710.rs new file mode 100644 index 0000000..6121b39 --- /dev/null +++ b/storage/zeta/rs/completed/25710.rs @@ -0,0 +1,57 @@ +use std::io::stdin; + +fn get_score(a: u32, b: u32) -> u32 { + let mut k = a * b; + vec![100000, 10000, 1000, 100, 10, 1] + .iter() + .map(|&x| { + let t = k / x; + k %= x; + t + }) + .sum() +} + +fn get_mult_score(a: &Vec) -> u32 { + let mut a_cnt = vec![0; 1000]; + for item in a { + a_cnt[*item as usize] += 1; + } + + a_cnt + .iter() + .enumerate() + .flat_map(|(ia, &ca)| { + a_cnt + .iter() + .enumerate() + .skip(ia) + .map(|(ib, &cb)| (ia, ca, ib, cb)) + .collect::>() + }) + .map(|(ia, ca, ib, cb)| { + if ca == 0 || cb == 0 { + 0 as u32 + } else if ia == ib && ca <= 1 { + 0 as u32 + } else { + get_score(ia as u32, ib as u32) + } + }) + .max() + .unwrap_or(0) +} + +fn main() { + let mut lines = stdin().lines(); + lines.next(); + let a: Vec = lines + .next() + .unwrap() + .unwrap() + .split_whitespace() + .map(|x| x.parse::().unwrap()) + .collect(); + + println!("{}", get_mult_score(&a)); +} diff --git a/storage/zeta/rs/completed/2887.rs b/storage/zeta/rs/completed/2887.rs new file mode 100644 index 0000000..498fb07 --- /dev/null +++ b/storage/zeta/rs/completed/2887.rs @@ -0,0 +1,103 @@ +use std::io::{stdin, BufRead}; + +fn planets_find(mut parents: &Vec, i: usize) -> usize { + let mut node = parents[i]; + while node != parents[node] { + node = parents[node]; + } + node +} + +fn planets_union(parents: &mut Vec, i: usize, j: usize) -> bool { + let ir = planets_find(parents, i); + let jr = planets_find(parents, j); + if ir == jr { + return false; + } + if ir < jr { + parents[jr] = ir; + } else { + parents[ir] = jr; + } + true +} + +fn get_minimum_cost_planet_tunnel(v: &Vec<(i32, i32, i32)>) -> usize { + let mut x_axis_find_base = v + .clone() + .into_iter() + .enumerate() + .map(|(i, x)| (x.0, i)) + .collect::>(); + let mut y_axis_find_base = v + .clone() + .into_iter() + .enumerate() + .map(|(i, x)| (x.1, i)) + .collect::>(); + let mut z_axis_find_base = v + .clone() + .into_iter() + .enumerate() + .map(|(i, x)| (x.2, i)) + .collect::>(); + + x_axis_find_base.sort(); + y_axis_find_base.sort(); + z_axis_find_base.sort(); + + let mut parents = (0..v.len()).map(|i| i).collect::>(); + + let mut candidate_edges: Vec<(usize, (usize, usize))> = Vec::new(); + for i in 0..v.len() - 1 { + let ahead = x_axis_find_base[i + 1]; + let now = x_axis_find_base[i]; + candidate_edges.push(((ahead.0 - now.0) as usize, (now.1, ahead.1))); + } + for i in 0..v.len() - 1 { + let ahead = y_axis_find_base[i + 1]; + let now = y_axis_find_base[i]; + candidate_edges.push(((ahead.0 - now.0) as usize, (now.1, ahead.1))); + } + for i in 0..v.len() - 1 { + let ahead = z_axis_find_base[i + 1]; + let now = z_axis_find_base[i]; + candidate_edges.push(((ahead.0 - now.0) as usize, (now.1, ahead.1))); + } + + candidate_edges.sort(); + let mut total_cost = 0; + for (cost, (i, j)) in candidate_edges { + if planets_union(&mut parents, i, j) { + total_cost += cost; + } + } + + total_cost +} + +fn main() { + let mut line = String::new(); + stdin().read_line(&mut line).unwrap(); + let n = line.trim_end().parse::().unwrap(); + line.clear(); + + let v: Vec<(i32, i32, i32)> = (0..n) + .map(|_| { + stdin().read_line(&mut line).unwrap(); + let mut iter = line.split_ascii_whitespace(); + + let t: (i32, i32, i32) = ( + iter.next().unwrap().parse().unwrap(), + iter.next().unwrap().parse().unwrap(), + iter.next().unwrap().parse().unwrap(), + ); + + line.clear(); + + t + }) + .collect(); + + println!("{}", get_minimum_cost_planet_tunnel(&v)); +} diff --git a/storage/zeta/rs/completed/34031.rs b/storage/zeta/rs/completed/34031.rs new file mode 100644 index 0000000..cd47f3a --- /dev/null +++ b/storage/zeta/rs/completed/34031.rs @@ -0,0 +1,85 @@ +use std::cmp::min; +use std::io::stdin; + +fn left_binary_search(arr: &Vec, target: i32) -> usize { + let mut lo = 0; + let mut hi = arr.len(); + + while lo < hi { + let mid = lo + ((hi - lo) >> 1); + + if arr[mid] >= target { + hi = mid; + } else { + lo = mid + 1; + } + } + + lo +} + +fn get_count_hightouch(s1: String, s2: String) -> i64 { + let mut cnt: i64 = 0; + + let mut cumulative_s1: Vec = Vec::new(); + + let mut before = 0; + + for c in s1.chars() { + if c == '(' { + before += 1; + } else { + before -= 1; + } + if before < 0 { + break; + } + // ())) 이래놓으면 할 수가 없음 + cumulative_s1.push(before); + } + + let mut cds: Vec> = vec![Vec::new(); 200001]; + + before = 0; + let mut cum_min = 0; + + for c in s2.chars() { + if c == '(' { + before += 1; + } else { + before -= 1; + } + + cum_min = min(before, cum_min); + + if before > 0 { + continue; + } else { + cds[(-before) as usize].push(cum_min); + } + } + + for v in cds.iter_mut() { + v.sort(); + } + + for a in cumulative_s1.iter() { + let mins = &cds[(*a) as usize]; + let append = (mins.len() - left_binary_search(mins, -a)) as i64; + cnt += append; + } + + cnt +} + +fn main() { + let (mut s1, mut s2) = (String::new(), String::new()); + + stdin().read_line(&mut s1).unwrap(); + stdin().read_line(&mut s2).unwrap(); + + s1 = s1.trim().to_string(); + s2 = s2.trim().to_string(); + + println!("{}", get_count_hightouch(s1, s2)); +}