From da64b06ee99a3f3193da04674766987537cceac7 Mon Sep 17 00:00:00 2001 From: li-chx Date: Sun, 17 Aug 2025 22:56:39 +0800 Subject: [PATCH] =?UTF-8?q?837.=20=E6=96=B0=2021=20=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 80 ++++++++++++++--------------------------------------- 1 file changed, 20 insertions(+), 60 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4030cda..24e0684 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,69 +1,29 @@ -struct SegmentTree { - tree: Vec, - arr: Vec, -} - -impl SegmentTree { - pub fn new(baskets: Vec) -> Self { - let n = baskets.len(); - let size = 2 << (32 - (n as u32 - 1).leading_zeros()); - let mut seg = SegmentTree { - tree: vec![0; size as usize], - arr: baskets.clone(), - }; - seg.build(1, 0, n - 1); - seg - } - - fn push_up(&mut self, o: usize) { - self.tree[o] = self.tree[o * 2].max(self.tree[o * 2 + 1]); - } - - fn build(&mut self, o: usize, l: usize, r: usize) { - if l == r { - self.tree[o] = self.arr[l]; - return; - } - let m = (l + r) / 2; - self.build(o * 2, l, m); - self.build(o * 2 + 1, m + 1, r); - self.push_up(o); - } - - pub fn find_update(&mut self, o: usize, l: usize, r: usize, x: i32) -> Option { - if self.tree[o] < x { - return None; - } - if l == r { - self.tree[o] = -1; - return Some(l); - } - let m = (l + r) / 2; - let mut i = self.find_update(o * 2, l, m, x); - if i.is_none() { - i = self.find_update(o * 2 + 1, m + 1, r, x); - } - self.push_up(o); - i - } -} struct Solution; impl Solution { - pub fn num_of_unplaced_fruits( fruits: Vec, baskets: Vec) -> i32 { - let n = baskets.len(); - let mut tree = SegmentTree::new(baskets); - let mut ans = 0; - - for fruit in fruits.iter() { - if tree.find_update(1,0,n-1,*fruit).is_none() { - ans += 1; - } + // return type: all situation, not crash situation + pub fn new21_game(n: i32, k: i32, max_pts: i32) -> f64 { + let mut mem = vec![0f64; (k + max_pts + 1) as usize]; + for i in k .. k + max_pts + 1 { + mem[i as usize] = if i <= n { 1f64 } else { 0f64 }; } - ans + let mut temp_ans = 0f64; + if(k - 1 >= 0) + { + let i = k - 1; + for j in 1..max_pts + 1 { + temp_ans += mem[(i + j) as usize]; + } + mem[i as usize] = temp_ans as f64 / max_pts as f64; + } + for i in (0..k - 1).rev() { + temp_ans += mem[(i + 1) as usize] - mem[(i + max_pts + 1) as usize]; + mem[i as usize] = temp_ans as f64 / max_pts as f64; + } + mem[0] } } fn main() { - let sl = Solution::num_of_unplaced_fruits(vec![4,2,5],vec![3,5,4]); + let sl = Solution::new21_game(21, 17, 10); println!("{:?}", sl); }