瀏覽代碼

11M on input D by changing scoring function

Guillaume Koenig 7 年之前
父節點
當前提交
5ef8a78866
共有 1 個文件被更改,包括 27 次插入7 次删除
  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 155
 func Choose(c *Car) *Ride {
136 156
 	var bestRide *Ride
137 157
 	bestLenOfRide := 0
138 158
 	bestTotal := 0
139 159
 	// fmt.Printf("car %d\n", c.ID)
140 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 162
 			continue
149 163
 		}
150 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 174
 	// if bestRide != nil {
161 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 183
 	return bestRide
164 184
 }
165 185