Advertisement
matheus_monteiro

F - Fun at Luggage Claim

Jun 9th, 2024
739
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.89 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "os"
  7.     "sort"
  8.     "strconv"
  9.     "strings"
  10. )
  11.  
  12. func processFromSmallestToBiggestVal(a, b []int) {
  13.     n := len(a)
  14.     position := make([]int, n)
  15.  
  16.     for i := 0; i < n; i++ {
  17.         position[i] = i
  18.     }
  19.  
  20.     sort.Slice(position, func(i, j int) bool {
  21.         return b[position[i]] < b[position[j]]
  22.     })
  23.  
  24.     for i := 0; i < n; i++ {
  25.         pos := position[i]
  26.         nextPos := (pos + 1) % n
  27.         prevPos := (pos - 1 + n) % n
  28.  
  29.         maxOperations := max(0, (a[pos]-max(a[prevPos], a[nextPos])+1)/3)
  30.  
  31.         numOperations := min(maxOperations, max(0, (a[pos]-b[pos])/2))
  32.  
  33.         a[pos] -= 2 * numOperations
  34.         a[prevPos] += numOperations
  35.         a[nextPos] += numOperations
  36.     }
  37. }
  38.  
  39. func checkIfTheyAreEqual(a, b []int) bool {
  40.     n := len(a)
  41.     for i := 0; i < n; i++ {
  42.         if a[i] != b[i] {
  43.             return false
  44.         }
  45.  
  46.     }
  47.     return true
  48. }
  49.  
  50. func main() {
  51.     in := bufio.NewReader(os.Stdin)
  52.     _ = readInt(in)
  53.  
  54.     a := readArrInt(in)
  55.     b := readArrInt(in)
  56.  
  57.     processFromSmallestToBiggestVal(a, b)
  58.  
  59.     if checkIfTheyAreEqual(a, b) {
  60.         fmt.Println("Yes")
  61.     } else {
  62.         fmt.Println("No")
  63.     }
  64. }
  65.  
  66. func readInt(in *bufio.Reader) int {
  67.     nStr, _ := in.ReadString('\n')
  68.     nStr = strings.ReplaceAll(nStr, "\r", "")
  69.     nStr = strings.ReplaceAll(nStr, "\n", "")
  70.     n, _ := strconv.Atoi(nStr)
  71.     return n
  72. }
  73.  
  74. func readLineNumbs(in *bufio.Reader) []string {
  75.     line, _ := in.ReadString('\n')
  76.     line = strings.ReplaceAll(line, "\r", "")
  77.     line = strings.ReplaceAll(line, "\n", "")
  78.     numbs := strings.Split(line, " ")
  79.     return numbs
  80. }
  81.  
  82. func readArrInt(in *bufio.Reader) []int {
  83.     numbs := readLineNumbs(in)
  84.     arr := make([]int, len(numbs))
  85.     for i, n := range numbs {
  86.         val, _ := strconv.Atoi(n)
  87.         arr[i] = val
  88.     }
  89.     return arr
  90. }
  91.  
  92. func readArrInt64(in *bufio.Reader) []int64 {
  93.     numbs := readLineNumbs(in)
  94.     arr := make([]int64, len(numbs))
  95.     for i, n := range numbs {
  96.         val, _ := strconv.ParseInt(n, 10, 64)
  97.         arr[i] = val
  98.     }
  99.     return arr
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement