From 337ebeb9b3745917d2ffb4f269262ced3058270d Mon Sep 17 00:00:00 2001 From: yenru0 Date: Wed, 14 May 2025 13:57:06 +0900 Subject: [PATCH] complete 22880.rs 26110.rs --- storage/zeta/rs/completed/22880.rs | 35 ++++++++++++++++++++++++++++ storage/zeta/rs/completed/26110.rs | 37 ++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 storage/zeta/rs/completed/22880.rs create mode 100644 storage/zeta/rs/completed/26110.rs diff --git a/storage/zeta/rs/completed/22880.rs b/storage/zeta/rs/completed/22880.rs new file mode 100644 index 0000000..28f5d0c --- /dev/null +++ b/storage/zeta/rs/completed/22880.rs @@ -0,0 +1,35 @@ +use std::io; + +fn beacon_interval_count(n: i32, hs: Vec) -> i64 { + let mut before: i32 = 0; + + let mut edge: Vec = Vec::new(); + + for (i, &h) in hs.iter().enumerate() { + if before < h { + before = h; + edge.push(i as i32); + } + } + + let mut cnt: i64 = 1; + let mut before_edge: i32 = 0; + for &ev in edge.iter() { + cnt = (cnt * ((ev - before_edge + 1) as i64)) % 1_000_000_007; + before_edge = ev; + } + + cnt +} + +fn main() { + let mut line = String::new(); + io::stdin().read_line(&mut line).unwrap(); + let n: i32; + n = line.trim().parse().unwrap(); + line.clear(); + io::stdin().read_line(&mut line).unwrap(); + let hs: Vec = line.trim().split(' ').map(|x| x.parse().unwrap()).collect(); + + println!("{}", beacon_interval_count(n, hs)); +} diff --git a/storage/zeta/rs/completed/26110.rs b/storage/zeta/rs/completed/26110.rs new file mode 100644 index 0000000..9c3eb9a --- /dev/null +++ b/storage/zeta/rs/completed/26110.rs @@ -0,0 +1,37 @@ +use std::cmp::min; + +fn find_type_of_palindrome(s: &String) -> i32 { + let s_chars = s.chars().collect::>(); + let mut dex: Vec<(i32, usize, usize)> = Vec::new(); + + dex.push((0, 0, s_chars.len() - 1)); + + let mut last_rm = 4; + + while !dex.is_empty() { + let (rm, start, end) = dex.pop().unwrap(); + if rm >= 4 || start >= end { + last_rm = min(last_rm, rm); + continue; + } + if s_chars[start] == s_chars[end] { + dex.push((rm, start + 1, end - 1)); + } else { + dex.push((rm + 1, start + 1, end)); + dex.push((rm + 1, start, end - 1)); + } + } + + return if (last_rm <= 3) { last_rm } else { -1 }; +} + +fn main() { + let mut s = String::new(); + + match std::io::stdin().read_line(&mut s) { + Ok(_) => s = s.trim().to_string(), + Err(_) => return, + }; + + println!("{}", find_type_of_palindrome(&s)); +}