Files
CodeObject/storage/hyup2/rs/completed/01_04.rs
T
2026-10-04 14:27:55 +09:00

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);
}