main.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "io"
  6. "log"
  7. "slices"
  8. "strconv"
  9. )
  10. const (
  11. MAX_LOOP = 1_000_000
  12. )
  13. var MAX_INT int = int(^uint(0) >> 1)
  14. var INT_SZ int = 1
  15. func main() {
  16. tmp := MAX_INT
  17. for tmp > 0 {
  18. INT_SZ++
  19. tmp >>= 1
  20. }
  21. left := make([]int, 0, 1024)
  22. right := make([]int, 0, 1024)
  23. var lStr, rStr string
  24. for i := 0; i < MAX_LOOP; i++ {
  25. n, err := fmt.Scan(&lStr, &rStr)
  26. if errors.Is(err, io.EOF) {
  27. break
  28. }
  29. if err != nil {
  30. log.Fatal("Unexpected error while reading input: ", err)
  31. }
  32. if n != 2 {
  33. log.Fatal(fmt.Sprintf("Unexpected number of fields at line %d of input", i+1))
  34. }
  35. l, err := strconv.ParseInt(lStr, 10, INT_SZ)
  36. r, err := strconv.ParseInt(rStr, 10, INT_SZ)
  37. left = append(left, int(l))
  38. right = append(right, int(r))
  39. }
  40. fmt.Printf("distance = %d\n", distance(left, right))
  41. }
  42. func distance(left, right []int) int {
  43. slices.Sort(left)
  44. slices.Sort(right)
  45. var sum int
  46. for i := 0; i < len(left); i++ {
  47. subSum := left[i] - right[i]
  48. if subSum < 0 {
  49. subSum *= -1
  50. }
  51. sum += subSum
  52. }
  53. return sum
  54. }