diff --git a/src/main.rs b/src/main.rs index 273b33b..14706d9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,40 +1,41 @@ struct Solution; mod arr; impl Solution { - fn get_product(a: i32, b: i32) -> i32 { - ((a as i64 * b as i64) % 12345) as i32 - } - pub fn construct_product_matrix(mut grid: Vec>) -> Vec> { - let mut arr = vec![0; grid.len() * grid[0].len()]; - let mut ans = vec![0; grid.len() * grid[0].len()]; + pub fn can_partition_grid(grid: Vec>) -> bool { + let mut sum = 0_i64; + let mut line = Vec::::with_capacity(grid.len()); for i in 0..grid.len() { - for j in 0..grid[0].len() { - arr[i * grid[0].len() + j] = grid[i][j]; + let mut cnt = 0_i64; + for j in 0..grid[i].len() { + cnt += grid[i][j] as i64; + } + sum += cnt; + line.push(cnt); + } + let mut lsum = line[0]; + for i in 1..line.len() { + if lsum * 2 == sum { + return true; + } + lsum += line[i]; + } + let mut column = 0_i64; + for i in 0..grid[0].len() - 1 { + let mut cnt = 0_i64; + for j in 0..grid.len() { + cnt += grid[j][i] as i64; + } + column += cnt; + if column * 2 == sum { + return true; } } - ans[0] = arr[0]; - for i in 1..arr.len() { - ans[i] = Solution::get_product(arr[i], ans[i - 1]); - } - let mut last = arr[ans.len() - 1]; - for i in (1..arr.len()-1).rev() { - let x = arr[i]; - arr[i] = Solution::get_product(ans[i-1], last); - last = Solution::get_product(last, x) - } - arr[0] = last % 12345; - arr[ans.len() - 1] = ans[ans.len() - 2] % 12345; - for i in 0..grid.len() { - for j in 0..grid[0].len() { - grid[i][j] = arr[i * grid[0].len() + j]; - } - } - grid + false } } fn main() { - let result = Solution::construct_product_matrix(arr::make_matrix(r#"[[1,2],[3,4]]"#)); + let result = Solution::can_partition_grid(arr::make_matrix(r#"[[42047],[57775],[99822]]"#)); println!("{:?}", result); } /*