Browse Source

11M on input D by changing scoring function

Guillaume Koenig 7 years ago
parent
commit
5ef8a78866
1 changed files with 27 additions and 7 deletions
  1. 27 7
      main.go

+ 27 - 7
main.go

@@ -132,19 +132,33 @@ func max(a, b int) int {
132
 	}
132
 	}
133
 }
133
 }
134
 
134
 
135
+func (c *Car) CanPick(r *Ride) bool {
136
+	return !r.used && r.f >= c.EarliestFinish(r)
137
+}
138
+
139
+func (c *Car) pickClosestLate() *Ride {
140
+	var best *Ride
141
+	var dbest = 999999999
142
+	for _, r := range Rides {
143
+		if !c.CanPick(r) {
144
+			continue
145
+		}
146
+		d := c.distanceTo(r.a, r.b)
147
+		if d < dbest && d > r.s-c.Arrival {
148
+			best = r
149
+			dbest = d
150
+		}
151
+	}
152
+	return best
153
+}
154
+
135
 func Choose(c *Car) *Ride {
155
 func Choose(c *Car) *Ride {
136
 	var bestRide *Ride
156
 	var bestRide *Ride
137
 	bestLenOfRide := 0
157
 	bestLenOfRide := 0
138
 	bestTotal := 0
158
 	bestTotal := 0
139
 	// fmt.Printf("car %d\n", c.ID)
159
 	// fmt.Printf("car %d\n", c.ID)
140
 	for _, r := range Rides {
160
 	for _, r := range Rides {
141
-		if r.used {
142
-			continue
143
-		}
144
-		if r.Length() > 6000 {
145
-			continue
146
-		}
147
-		if r.f < c.EarliestFinish(r) {
161
+		if !c.CanPick(r) {
148
 			continue
162
 			continue
149
 		}
163
 		}
150
 		// fmt.Printf("%d %d -> %d %d\n", r.a, r.b, r.x, r.y)
164
 		// fmt.Printf("%d %d -> %d %d\n", r.a, r.b, r.x, r.y)
@@ -160,6 +174,12 @@ func Choose(c *Car) *Ride {
160
 	// if bestRide != nil {
174
 	// if bestRide != nil {
161
 	// 	fmt.Printf("Picking %d %d -> %d %d\n", bestRide.a, bestRide.b, bestRide.x, bestRide.y)
175
 	// 	fmt.Printf("Picking %d %d -> %d %d\n", bestRide.a, bestRide.b, bestRide.x, bestRide.y)
162
 	// }
176
 	// }
177
+	if bestRide != nil {
178
+		r := c.pickClosestLate()
179
+		if r != nil {
180
+			bestRide = r
181
+		}
182
+	}
163
 	return bestRide
183
 	return bestRide
164
 }
184
 }
165
 
185