1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| package main
import ( "bufio" "fmt" "os" "strconv" )
func main() { scanner := bufio.NewScanner(os.Stdin) scanner.Split(bufio.ScanWords)
scanner.Scan() n, _ := strconv.Atoi(scanner.Text()) scanner.Scan() m, _ := strconv.Atoi(scanner.Text())
grid := make([][]int, n) for i := 0; i < n; i++ { grid[i] = make([]int, m) for j := 0; j < m; j++ { scanner.Scan() num, _ := strconv.Atoi(scanner.Text()) grid[i][j] = num } }
total := 0 for i := 0; i < n; i++ { for j := 0; j < m; j++ { total += grid[i][j] } }
rowSum := make([]int, n) for i := 0; i < n; i++ { sum := 0 for j := 0; j < m; j++ { sum += grid[i][j] } rowSum[i] = sum } rowPrefix := make([]int, n+1) for k := 1; k <= n; k++ { rowPrefix[k] = rowPrefix[k-1] + rowSum[k-1] }
colSum := make([]int, m) for j := 0; j < m; j++ { sum := 0 for i := 0; i < n; i++ { sum += grid[i][j] } colSum[j] = sum } colPrefix := make([]int, m+1) for l := 1; l <= m; l++ { colPrefix[l] = colPrefix[l-1] + colSum[l-1] }
minDiff := 1 << 30
if n > 1 { for k := 1; k <= n-1; k++ { sum := rowPrefix[k] diff := abs(2*sum - total) if diff < minDiff { minDiff = diff } } }
if m > 1 { for l := 1; l <= m-1; l++ { sum := colPrefix[l] diff := abs(2*sum - total) if diff < minDiff { minDiff = diff } } }
fmt.Println(minDiff) }
func abs(x int) int { if x < 0 { return -x } return x }
|