From ee84782160eb0394dc1aabd12cba714c465936d9 Mon Sep 17 00:00:00 2001 From: jackfiled Date: Tue, 6 Feb 2024 11:07:21 +0800 Subject: [PATCH] 20240206 Finished --- src/problem/lcp30_magic_tower.rs | 49 ++++++++++++++++++++++++++++++++ src/problem/mod.rs | 3 +- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/problem/lcp30_magic_tower.rs diff --git a/src/problem/lcp30_magic_tower.rs b/src/problem/lcp30_magic_tower.rs new file mode 100644 index 0000000..2f5334e --- /dev/null +++ b/src/problem/lcp30_magic_tower.rs @@ -0,0 +1,49 @@ +pub struct Solution {} + +use std::collections::BinaryHeap; +use std::cmp::Reverse; + +impl Solution { + pub fn magic_tower(nums: Vec) -> i32 { + let mut heap = BinaryHeap::new(); + + let mut count = 0; + let (mut now, mut delay) = (1i64, 0i64); + + for num in nums { + if num < 0 { + heap.push(Reverse(num)); + } + + now += num as i64; + if now <= 0 { + count += 1; + + let m = heap.pop().unwrap().0 as i64; + now -= m; + delay += m; + } + } + + now += delay; + + if now <= 0 { + -1 + } else { + count + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_lcp30() { + assert_eq!(Solution::magic_tower( + vec![100,100,100,-250,-60,-140,-50,-50,100,150]), 1); + assert_eq!(Solution::magic_tower( + vec![-200,-300,400,0]), -1); + } +} \ No newline at end of file diff --git a/src/problem/mod.rs b/src/problem/mod.rs index 56e7430..c4d82b4 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -38,4 +38,5 @@ mod lcp24_nums_game; mod p1686_stone_game_vi; mod p1690_stone_game_vii; mod p292_nim_game; -mod p1696_jump_game_vi; \ No newline at end of file +mod p1696_jump_game_vi; +mod lcp30_magic_tower; \ No newline at end of file