From bd8207767adc97f90b065cdffe272a76a6aa0b90 Mon Sep 17 00:00:00 2001 From: li_chx Date: Tue, 10 Mar 2026 09:51:11 +0800 Subject: [PATCH] =?UTF-8?q?3129.=20=E6=89=BE=E5=87=BA=E6=89=80=E6=9C=89?= =?UTF-8?q?=E7=A8=B3=E5=AE=9A=E7=9A=84=E4=BA=8C=E8=BF=9B=E5=88=B6=E6=95=B0?= =?UTF-8?q?=E7=BB=84=20I?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 77 ++++++++++++++++++++--------------------------------- 1 file changed, 29 insertions(+), 48 deletions(-) diff --git a/src/main.rs b/src/main.rs index 40b6c2c..33bb780 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,62 +1,43 @@ -use std::cmp::min; - struct Solution; mod arr; impl Solution { - pub fn min_flips(s: String) -> i32 { - let mut len = s.len(); - let (mut even_zero, mut even_one, mut odd_zero, mut odd_one) = (0, 0, 0, 0); - //let s = (s.clone() + &s).chars().collect::>(); - let mut ans = 1e6 as i32; - let mut is_even = true; - - for c in s.chars() { - if is_even { - is_even = false; - if c == '0' { - even_zero += 1; - } else { - even_one += 1; - } - } else { - is_even = true; - if c == '0' { - odd_zero += 1; - } else { - odd_one += 1; - } + pub fn number_of_stable_arrays(zero: i32, one: i32, limit: i32) -> i32 { + let md = 1e9 as i64 + 7; + let mut dp = vec![vec![vec![0; 2]; one as usize + 1]; zero as usize + 1]; + for i in 1..=limit as usize { + if i <= one as usize { + dp[0][i][1] = 1; + } + if i <= zero as usize { + dp[i][0][0] = 1; } } - for c in s.chars() { - ans = min(ans, min(odd_zero + even_one, odd_one + even_zero)); - if len & 1 == 1 { - if c == '0' { - odd_zero += 1; + for i in 1..=zero as usize { + for j in 1..=one as usize { + dp[i][j][0] = (((dp[i - 1][j][0] + dp[i - 1][j][1] + - if i as i32 - limit - 1 >= 0 { + dp[i - limit as usize - 1][j][1] } else { - odd_one += 1; - } - } else { - if c == '0' { - even_zero += 1; + 0 + }) as i64 + + md) + % md) as i32; + dp[i][j][1] = (((dp[i][j - 1][0] + dp[i][j - 1][1] + - if j as i32 - limit - 1 >= 0 { + dp[i][j - limit as usize - 1][0] } else { - even_one += 1; - } - } - (even_zero, even_one, odd_zero, odd_one) = (odd_zero, odd_one, even_zero, even_one); - if c == '0' { - odd_zero -= 1; - } else { - odd_one -= 1; + 0 + }) as i64 + + md) + % md) as i32; } } - ans + ((dp[zero as usize][one as usize][0] as i64 + dp[zero as usize][one as usize][1] as i64) % md) as i32 } } -// 111000 o0 1 o1 2 j0 2 j1 1 -// 1110001 o0 1 o1 3 j0 2 j1 1 -// 1110001 o0 2 o1 1 j0 1 j1 3 -// 110001 2 1 1 2 + fn main() { - let result = Solution::min_flips("111000".to_string()); + let result = Solution::number_of_stable_arrays(39, 20, 18); + // let result = Solution::number_of_stable_arrays(200, 200, 25); println!("{:?}", result); }