Skip to content

Commit f076e03

Browse files
committed
p2401
1 parent bf3105e commit f076e03

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

Diff for: src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
mod p2206 ;
1+
mod p2401;
22

33
pub fn main() {
4-
p2206::run();
4+
p2401::run();
55
}

Diff for: src/p2401.rs

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
pub fn run() {
2+
for i in [
3+
vec![1,3,8,48,10],
4+
vec![3,1,5,11,13],
5+
vec![744437702,379056602,145555074,392756761,560864007,934981918,113312475,1090,16384,33,217313281,117883195,978927664],
6+
vec![84139415,693324769,614626365,497710833,615598711,264,65552,50331652,1,1048576,16384,544,270532608,151813349,221976871,678178917,845710321,751376227,331656525,739558112,267703680]
7+
] {
8+
println!("{}", longest_nice_subarray(i));
9+
}
10+
}
11+
12+
pub fn _longest_nice_subarray(nums: Vec<i32>) -> i32 {
13+
let mut result = 0;
14+
let mut current = 0;
15+
16+
let mut nums_iter = nums.iter();
17+
let mut current_pool = *nums_iter.next().unwrap();
18+
19+
while let Some(n) = nums_iter.next() {
20+
if (current_pool ^ *n) == (current_pool + n) {
21+
current_pool ^= n;
22+
if current == 0 {
23+
current = 2
24+
} else {
25+
current += 1;
26+
}
27+
result = result.max(current);
28+
} else {
29+
current_pool = *n;
30+
current = 0;
31+
}
32+
33+
println!("{} {} {}", format!("{current_pool:032b}").replace("0", " "), if (format!("{current_pool:032b}").replace("0", " ") == format!("{n:032b}").replace("0", " ")) { ":" } else { "=" }, format!("{n:032b}").replace("0", " "));
34+
}
35+
36+
if result == 0 {
37+
return 1;
38+
}
39+
result
40+
}
41+
42+
pub fn longest_nice_subarray(nums: Vec<i32>) -> i32 {
43+
let mut left = 0;
44+
let mut right = 1;
45+
46+
let mut result = 1;
47+
48+
let mut pool = nums[0];
49+
50+
while right < nums.len() {
51+
let n = nums[right];
52+
53+
while (pool & n) != 0 {
54+
// remove from left
55+
pool ^= nums[left];
56+
left += 1;
57+
}
58+
pool ^= n;
59+
right += 1;
60+
61+
result = result.max(right - left);
62+
}
63+
64+
result as i32
65+
}

0 commit comments

Comments
 (0)