50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
use std::io::{read_to_string, stdin};
|
|
|
|
fn cost(k: i64) -> i64 {
|
|
k * k + (k + 1) * (k + 1)
|
|
}
|
|
|
|
fn drill(field: &Vec<Vec<i64>>, n: usize, k: i64, r: usize, c:usize) -> i64 {
|
|
if k == 0 {
|
|
return field[r][c];
|
|
} else {
|
|
let mut s = 0;
|
|
for i in 0..n {
|
|
for j in 0..n {
|
|
if (i as i64 - r as i64).abs() + (j as i64 - c as i64).abs() <= k {
|
|
s += field[i][j];
|
|
}
|
|
}
|
|
}
|
|
s
|
|
}
|
|
}
|
|
|
|
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() as i64;
|
|
let mut maxima = 0;
|
|
|
|
let mut field = vec![vec![0; n]; n];
|
|
for i in 0..n {
|
|
for j in 0..n {
|
|
field[i][j] = iter.next().unwrap() as i64;
|
|
}
|
|
}
|
|
for i in 0..n {
|
|
for j in 0..n {
|
|
for ii in 0..20 {
|
|
let s = drill(&field, n, ii, i, j);
|
|
if s * m >= cost(ii) {
|
|
maxima = maxima.max(s);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
println!("{}", maxima);
|
|
} |