|
@@ -116,25 +116,39 @@ func (c *Car) distanceTo(x, y int) int {
|
116
|
116
|
return abs(c.X-x) + abs(c.Y-y)
|
117
|
117
|
}
|
118
|
118
|
|
|
119
|
+func max(a, b int) int {
|
|
120
|
+ if a > b {
|
|
121
|
+ return a
|
|
122
|
+ } else {
|
|
123
|
+ return b
|
|
124
|
+ }
|
|
125
|
+}
|
|
126
|
+
|
119
|
127
|
func Choose(c *Car) *Ride {
|
120
|
128
|
var bestRide *Ride
|
121
|
129
|
bestLenOfRide := 0
|
122
|
130
|
bestTotal := 0
|
123
|
|
- for _, r := range Rides[1:] {
|
|
131
|
+ // fmt.Printf("car %d\n", c.ID)
|
|
132
|
+ for _, r := range Rides {
|
124
|
133
|
if r.used {
|
125
|
134
|
continue
|
126
|
135
|
}
|
127
|
|
- if r.f < c.EarliestFinish(r) {
|
128
|
|
- continue
|
129
|
|
- }
|
|
136
|
+ // if r.f < c.EarliestFinish(r) {
|
|
137
|
+ // continue
|
|
138
|
+ // }
|
|
139
|
+ // fmt.Printf("%d %d -> %d %d\n", r.a, r.b, r.x, r.y)
|
130
|
140
|
lenOfRide := r.length()
|
131
|
|
- total := c.distanceTo(r.a, r.b) + lenOfRide
|
132
|
|
- if bestRide == nil || lenOfRide*bestTotal < total*bestLenOfRide {
|
|
141
|
+ total := max(c.distanceTo(r.a, r.b), r.s-c.Arrival) + lenOfRide
|
|
142
|
+ // fmt.Printf("%d/%d\n", lenOfRide, total)
|
|
143
|
+ if bestRide == nil || lenOfRide*bestTotal > total*bestLenOfRide {
|
133
|
144
|
bestLenOfRide = lenOfRide
|
134
|
145
|
bestTotal = total
|
135
|
146
|
bestRide = r
|
136
|
147
|
}
|
137
|
148
|
}
|
|
149
|
+ // if bestRide != nil {
|
|
150
|
+ // fmt.Printf("Picking %d %d -> %d %d\n", bestRide.a, bestRide.b, bestRide.x, bestRide.y)
|
|
151
|
+ // }
|
138
|
152
|
return bestRide
|
139
|
153
|
}
|
140
|
154
|
|