https://atcoder.jp/contests/typical90/tasks/typical90_d
とすれば、
となります。
// Cross Sum #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok(); line.trim().parse().ok().unwrap() } fn read_vec<T: std::str::FromStr>() -> Vec<T> { read::<String>().split_whitespace() .map(|e| e.parse().ok().unwrap()).collect() } //////////////////// process //////////////////// type Matrix = Vec<Vec<i32>>; fn print_mat(M: &Matrix) { for v in M.iter() { let ss: Vec<String> = v.iter().map(|e| e.to_string()).collect(); println!("{}", ss.join(" ")) } } fn read_input() -> Matrix { let v: Vec<i32> = read_vec(); let (H, _W) = (v[0], v[1]); let A: Matrix = (0..H).map(|_| read_vec::<i32>()).collect(); A } fn F(A: Matrix) { let H = A.len(); let W = A[0].len(); let sum_rows: Vec<i32> = A.iter().map(|v| v.iter().sum::<i32>()).collect(); let sum_cols: Vec<i32> = (0..W).map(|c| (0..H).map(|r| A[r][c]).sum::<i32>()). collect(); let cross_sum = |i: usize, j: usize| -> i32 { sum_rows[i] + sum_cols[j] - A[i][j] }; let B: Matrix = (0..H).map(|r| (0..W).map(|c| cross_sum(r, c)). collect::<Vec<i32>>()). collect(); print_mat(&B) } fn main() { let A = read_input(); F(A) }