2125. 银行中的激光束数量

This commit is contained in:
li-chx 2025-10-31 17:09:19 +08:00
parent 292f597d2b
commit 4f601269e8
1 changed files with 14 additions and 21 deletions

View File

@ -2,32 +2,25 @@ mod arr;
struct Solution {}
impl Solution {
pub fn get_sneaky_numbers(nums: Vec<i32>) -> Vec<i32> {
let n = nums.len() - 2;
let xor_all: i32 = nums.iter().enumerate().fold((n ^ (n+1)) as i32, |acc, (i ,&x)| acc ^ x ^ i as i32);
let mut idx = 0;
let mut calc_idx = xor_all;
while true {
if calc_idx % 2 == 1 {
break;
pub fn number_of_beams(bank: Vec<String>) -> i32 {
let mut ans = 0;
let mut last_ones = 0;
for i in 0..bank.len() {
let new_ones = bank[i].chars().fold(0,|last, c| last + if c == '1'{1}else {0});
if new_ones == 0 {
continue;
}
calc_idx >>= 1;
idx += 1;
}
let mut ans = vec![0;2];
for (i,&x) in nums.iter().enumerate() {
if i < n{
ans[i >> idx &1 as usize] ^= i as i32;
}
ans[(x >> idx &1) as usize] ^= x;
ans += last_ones * new_ones;
last_ones = new_ones;
}
ans
}
}
fn main() {
println!(
"{:?}",
Solution::get_sneaky_numbers(vec![2,0,2,1,0])
);
let src = vec!["011001", "000000", "010100", "001000"]
.iter()
.map(|s| s.to_string())
.collect();
println!("{:?}", Solution::number_of_beams(src));
}