1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package main
- import (
- "errors"
- "fmt"
- "io"
- "log"
- "slices"
- "strconv"
- )
- const (
- MAX_LOOP = 1_000_000
- )
- var MAX_INT int = int(^uint(0) >> 1)
- var INT_SZ int = 1
- func main() {
- tmp := MAX_INT
- for tmp > 0 {
- INT_SZ++
- tmp >>= 1
- }
- left := make([]int, 0, 1024)
- right := make([]int, 0, 1024)
- var lStr, rStr string
- for i := 0; i < MAX_LOOP; i++ {
- n, err := fmt.Scan(&lStr, &rStr)
- if errors.Is(err, io.EOF) {
- break
- }
- if err != nil {
- log.Fatal("Unexpected error while reading input: ", err)
- }
- if n != 2 {
- log.Fatal(fmt.Sprintf("Unexpected number of fields at line %d of input", i+1))
- }
- l, err := strconv.ParseInt(lStr, 10, INT_SZ)
- r, err := strconv.ParseInt(rStr, 10, INT_SZ)
- left = append(left, int(l))
- right = append(right, int(r))
- }
- fmt.Printf("distance = %d\n", distance(left, right))
- }
- func distance(left, right []int) int {
- slices.Sort(left)
- slices.Sort(right)
- var sum int
- for i := 0; i < len(left); i++ {
- subSum := left[i] - right[i]
- if subSum < 0 {
- subSum *= -1
- }
- sum += subSum
- }
- return sum
- }
|