61 lines
1.3 KiB
Rust
61 lines
1.3 KiB
Rust
use std::io::{read_to_string, stdin};
|
|
|
|
fn main() {
|
|
let temp = read_to_string(stdin()).unwrap();
|
|
let mut iter = temp
|
|
.split_ascii_whitespace()
|
|
.map(|x| x.parse::<usize>().unwrap());
|
|
|
|
let n = iter.next().unwrap();
|
|
let m = iter.next().unwrap();
|
|
|
|
let grid: Vec<Vec<usize>> = (0..n)
|
|
.map(|_| (0..m).map(|_| iter.next().unwrap()).collect())
|
|
.collect();
|
|
|
|
let mut maxima = 0;
|
|
|
|
//
|
|
for i in (0..n - 1) {
|
|
for j in (0..m - 1) {
|
|
let s = grid[i][j] + grid[i][j + 1] + grid[i + 1][j] + grid[i + 1][j + 1];
|
|
|
|
let m = [
|
|
s - grid[i][j],
|
|
s - grid[i][j + 1],
|
|
s - grid[i + 1][j],
|
|
s - grid[i + 1][j + 1],
|
|
]
|
|
.into_iter()
|
|
.max().unwrap();
|
|
|
|
if m > maxima {
|
|
maxima = m;
|
|
}
|
|
}
|
|
}
|
|
//
|
|
for i in (0..n - 2) {
|
|
for j in (0..m) {
|
|
let s = grid[i][j] + grid[i + 1][j] + grid[i + 2][j];
|
|
|
|
if s > maxima {
|
|
maxima = s;
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
for i in (0..n) {
|
|
for j in (0..m - 2) {
|
|
let s = grid[i][j] + grid[i][j + 1] + grid[i][j + 2];
|
|
|
|
if s > maxima {
|
|
maxima = s;
|
|
}
|
|
}
|
|
}
|
|
|
|
println!("{}", maxima);
|
|
}
|