diff --git a/src/problem/mod.rs b/src/problem/mod.rs index 792a436..fa8f00d 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -670,3 +670,5 @@ mod p3355_zero_array_transformation_i; mod p3356_zero_array_transformation_ii; mod p3362_zero_array_transformation_iii; + +mod p3068_find_the_maximum_sum_of_node_values; diff --git a/src/problem/p3068_find_the_maximum_sum_of_node_values.rs b/src/problem/p3068_find_the_maximum_sum_of_node_values.rs new file mode 100644 index 0000000..1987381 --- /dev/null +++ b/src/problem/p3068_find_the_maximum_sum_of_node_values.rs @@ -0,0 +1,53 @@ +/** + * [3068] Find the Maximum Sum of Node Values + */ +pub struct Solution {} + +// submission codes start here + +impl Solution { + pub fn maximum_value_sum(nums: Vec, k: i32, _: Vec>) -> i64 { + let mut result: i64 = nums.iter().map(|x| *x as i64).sum(); + + let mut difference: Vec = nums.iter().map(|&x| ((x ^ k) - x) as i64).collect(); + difference.sort_unstable_by(|a, b| b.cmp(a)); + + for pair in difference.chunks(2) { + let sum: i64 = pair.iter().sum(); + if pair.len() != 2 || sum < 0 { + break; + } + + result += sum; + } + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_3068() { + assert_eq!( + 6, + Solution::maximum_value_sum(vec![1, 2, 1], 3, vec![vec![0, 1], vec![0, 2]]) + ); + assert_eq!( + 9, + Solution::maximum_value_sum(vec![2, 3], 7, vec![vec![0, 1]]) + ); + assert_eq!( + 42, + Solution::maximum_value_sum( + vec![7; 6], + 3, + vec![vec![0, 1], vec![0, 2], vec![0, 3], vec![0, 4], vec![0, 5]] + ) + ); + } +}