Advertisement
isbasov

task 6

May 5th, 2024 (edited)
1,127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.50 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "os"
  7.     "sort"
  8.     "strconv"
  9.     "strings"
  10.     //"github.com/pkg/profile"
  11. )
  12.  
  13. type order struct {
  14.     Arrival int
  15.     Index   int
  16. }
  17.  
  18. type car struct {
  19.     From  int
  20.     To    int
  21.     Cap   int
  22.     Index int
  23. }
  24.  
  25. func main() {
  26.  
  27.     //defer profile.Start(profile.CPUProfile).Stop()
  28.     in := bufio.NewReader(os.Stdin)
  29.     out := bufio.NewWriter(os.Stdout)
  30.     defer out.Flush()
  31.  
  32.     var t int
  33.     fmt.Fscan(in, &t)
  34.  
  35.     for l := 0; l < t; l++ {
  36.         var n int
  37.         fmt.Fscan(in, &n)
  38.         orders := make([]order, n)
  39.  
  40.         for i := 0; i < n; i++ {
  41.             o := order{Index: i}
  42.             fmt.Fscan(in, &o.Arrival)
  43.             orders[i] = o
  44.         }
  45.         sort.SliceStable(orders, func(i, j int) bool { return orders[i].Arrival < orders[j].Arrival })
  46.  
  47.         var m int
  48.         fmt.Fscan(in, &m)
  49.         cars := make([]car, m)
  50.         for i := 0; i < m; i++ {
  51.             c := car{Index: i}
  52.             fmt.Fscan(in, &c.From, &c.To, &c.Cap)
  53.             cars[i] = c
  54.         }
  55.  
  56.         sort.SliceStable(cars, func(i, j int) bool {
  57.             if cars[i].From == cars[j].From {
  58.                 return cars[i].To < cars[j].To
  59.             }
  60.             return cars[i].From < cars[j].From
  61.         })
  62.  
  63.         orderCars := make([]string, n)
  64.         var k int
  65.         for i := range orders {
  66.             orderCars[orders[i].Index] = "-1"
  67.             for j := k; j < m; j++ {
  68.                 if orders[i].Arrival >= cars[j].From && orders[i].Arrival <= cars[j].To && cars[j].Cap > 0 {
  69.                     orderCars[orders[i].Index] = strconv.Itoa(cars[j].Index + 1)
  70.                     cars[j].Cap--
  71.                     k = j
  72.                     break
  73.                 }
  74.             }
  75.         }
  76.  
  77.         out.WriteString(strings.Join(orderCars, " "))
  78.         out.WriteString("\n")
  79.     }
  80.  
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement