From 1d70fa4cd6a3b089a6b73e1c3008aacb3974a47e Mon Sep 17 00:00:00 2001 From: yenru0 Date: Wed, 17 Dec 2025 01:53:58 +0900 Subject: [PATCH] complete 11971.rs 30928.rs --- storage/zeta/rs/completed/11971.rs | 73 ++++++++++++++++++++++++++++++ storage/zeta/rs/completed/30928.rs | 64 ++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 storage/zeta/rs/completed/11971.rs create mode 100644 storage/zeta/rs/completed/30928.rs diff --git a/storage/zeta/rs/completed/11971.rs b/storage/zeta/rs/completed/11971.rs new file mode 100644 index 0000000..a778de4 --- /dev/null +++ b/storage/zeta/rs/completed/11971.rs @@ -0,0 +1,73 @@ +use std::{io::stdin, iter::zip}; + +pub struct Road { + length: usize, + max_speed: usize, +} + +fn get_road_speed_by_distance(road: &Vec) -> Vec { + let mut speed_by_distance: Vec = Vec::new(); + + for road_segment in road.iter() { + for _ in 0..road_segment.length { + speed_by_distance.push(road_segment.max_speed); + } + } + + return speed_by_distance; +} + +fn get_violation_count(road: &Vec, road_run: &Vec) -> usize { + let speed_limit = get_road_speed_by_distance(road); + let run_speed = get_road_speed_by_distance(road_run); + + if (speed_limit.len() != run_speed.len()) { + panic!("Road and run lengths do not match!"); + } + + return + zip(speed_limit, run_speed) + .map(|(limit, speed)| speed.saturating_sub(limit) ) + .max().unwrap(); +} + +fn main() { + let mut line = String::new(); + + stdin().read_line(&mut line).unwrap(); + let (n, m) = { + let mut iter = line.split(' ').map(|x| x.trim().parse::().unwrap()); + + (iter.next().unwrap(), iter.next().unwrap()) + }; + + let road: Vec = { + (0..n).map(|_| { + line.clear(); + stdin().read_line(&mut line).unwrap(); + let mut iter = line.split(' ').map(|x| x.trim().parse::().unwrap()); + + Road { + length: iter.next().unwrap(), + max_speed: iter.next().unwrap(), + } + }) + } + .collect::>(); + + let road_run = { + (0..m).map(|_| { + line.clear(); + stdin().read_line(&mut line).unwrap(); + let mut iter = line.split(' ').map(|x| x.trim().parse::().unwrap()); + + Road { + length: iter.next().unwrap(), + max_speed: iter.next().unwrap(), + } + }) + } + .collect::>(); + + println!("{}", get_violation_count(&road, &road_run)); +} diff --git a/storage/zeta/rs/completed/30928.rs b/storage/zeta/rs/completed/30928.rs new file mode 100644 index 0000000..95a65b1 --- /dev/null +++ b/storage/zeta/rs/completed/30928.rs @@ -0,0 +1,64 @@ +use std::io::stdin; + +const YOKOHAMA: &[char] = &['Y', 'O', 'K', 'O', 'H', 'A', 'M', 'A']; + +fn get_yokohama_count(size: (usize, usize), field: &Vec>) -> usize { + let (n, m) = size; + let mut count = 0; + + let mut startings: Vec<(usize, usize)> = vec![]; + for i in 0..n { + for j in 0..m { + if field[i][j] == 'Y' { + startings.push((i, j)); + } + } + } + + let mut deq: Vec<((usize, usize), usize)> = vec![]; + for starting in startings { + deq.push((starting, 0)); + } + + while !deq.is_empty() { + let (loc, curr) = deq.pop().unwrap(); + let next_char = YOKOHAMA[curr + 1]; + for (dx, dy) in [(-1, 0), (1, 0), (0, -1), (0, 1)] { + let new_x = loc.0 as isize + dx; + let new_y = loc.1 as isize + dy; + if new_x < 0 || new_x >= n as isize || new_y < 0 || new_y >= m as isize { + continue; + } + let new_loc = (new_x as usize, new_y as usize); + + if field[new_loc.0][new_loc.1] == next_char { + if curr + 1 == YOKOHAMA.len() - 1 { + count += 1; + } else { + deq.push((new_loc, curr + 1)); + } + } + } + } + + count +} + +fn main() { + let mut line = String::new(); + + let (n, m) = { + stdin().read_line(&mut line).unwrap(); + let mut iter = line.split(' ').map(|x| x.trim().parse::().unwrap()); + (iter.next().unwrap(), iter.next().unwrap()) + }; + + let field = (0..n) + .map(|_| { + line.clear(); + stdin().read_line(&mut line).unwrap(); + line.trim_ascii().chars().collect::>() + }) + .collect::>>(); + println!("{}", get_yokohama_count((n, m), &field)); +}