Submission #27971957
Source Code Expand
import std.algorithm, std.array, std.container, std.conv, std.math, std.numeric, std.random, std.range, std.stdio, std.string, std.typecons, core.bitop; struct Point { int x, y; }; struct Route { int id; Point from, to; }; int mhdistance(Point a, Point b) { return abs(a.x - b.x) + abs(a.y - b.y); } double distance(Point a, Point b) { return mhdistance(a, b); } double route_score(Point base, Route r) { double d1 = distance(base, r.from), d2 = distance(base, r.to); return d1 * d1 + d2 * d2; } long solve(Route[] pending_routes, ref int[] done_routes, ref int[] ans) { int m = 50; Point[] pending_dest; Point lastpos = Point(400, 400); ans ~= 400; ans ~= 400; long score = 0; while (done_routes.length < m || pending_dest.length > 0) { bool do_route = false; if (pending_dest.length == 0) { do_route = true; } else if (done_routes.length < m) { if (distance(pending_routes[0].from, lastpos) <= distance(pending_dest[0], lastpos)) { do_route = true; } } if (do_route) { score += mhdistance(lastpos, pending_routes[0].from); done_routes ~= pending_routes[0].id; lastpos = Point(pending_routes[0].from.x, pending_routes[0].from.y); ans ~= pending_routes[0].from.x; ans ~= pending_routes[0].from.y; pending_dest ~= Point(pending_routes[0].to.x, pending_routes[0].to.y); pending_routes = pending_routes[1 .. $]; pending_routes.sort!((a, b) => distance(lastpos, a.from) < distance(lastpos, b.from)); pending_dest.sort!((a, b) => distance(lastpos, a) < distance(lastpos, b)); } else { score += mhdistance(lastpos, pending_dest[0]); lastpos = Point(pending_dest[0].x, pending_dest[0].y); ans ~= pending_dest[0].x; ans ~= pending_dest[0].y; pending_dest = pending_dest[1 .. $]; pending_dest.sort!((a, b) => distance(lastpos, a) < distance(lastpos, b)); } } ans ~= 400; ans ~= 400; score += mhdistance(lastpos, Point(400, 400)); return score; } void main() { Route[] routes; foreach (i ; 0 .. 1000) { int x1, y1, x2, y2; readf!" %d %d %d %d "(x1, y1, x2, y2); routes ~= Route(i + 1, Point(x1, y1), Point(x2, y2)); } auto base = Point(400, 400); routes.sort!((a, b) => route_score(base, a) < route_score(base, b)); int[] final_ans, final_done_routes; long best_score = long.max; int m = 50; foreach (i ; 0 .. 400) { int[] ans, done_routes; Route[] pending_routes = routes[0 .. m + i].dup; long score = solve(pending_routes, done_routes, ans); if (score < best_score) { final_ans = ans.dup; final_done_routes = done_routes.dup; best_score = score; } } writefln("%d %s", m, final_done_routes.map!text.join(" ")); writefln("%d %s", final_ans.length / 2, final_ans.map!text.join(" ")); }
Submission Info
Submission Time | |
---|---|
Task | A - Food Delivery |
User | ssvb |
Language | D (LDC 1.20.1) |
Score | 1459242 |
Code Size | 2966 Byte |
Status | AC |
Exec Time | 266 ms |
Memory | 5388 KiB |
Judge Result
Set Name | test_ALL | ||
---|---|---|---|
Score / Max Score | 1459242 / 10000000 | ||
Status |
|
Set Name | Test Cases |
---|---|
test_ALL | test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt, test_0050.txt, test_0051.txt, test_0052.txt, test_0053.txt, test_0054.txt, test_0055.txt, test_0056.txt, test_0057.txt, test_0058.txt, test_0059.txt, test_0060.txt, test_0061.txt, test_0062.txt, test_0063.txt, test_0064.txt, test_0065.txt, test_0066.txt, test_0067.txt, test_0068.txt, test_0069.txt, test_0070.txt, test_0071.txt, test_0072.txt, test_0073.txt, test_0074.txt, test_0075.txt, test_0076.txt, test_0077.txt, test_0078.txt, test_0079.txt, test_0080.txt, test_0081.txt, test_0082.txt, test_0083.txt, test_0084.txt, test_0085.txt, test_0086.txt, test_0087.txt, test_0088.txt, test_0089.txt, test_0090.txt, test_0091.txt, test_0092.txt, test_0093.txt, test_0094.txt, test_0095.txt, test_0096.txt, test_0097.txt, test_0098.txt, test_0099.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
test_0000.txt | AC | 228 ms | 5144 KiB |
test_0001.txt | AC | 216 ms | 5236 KiB |
test_0002.txt | AC | 241 ms | 5324 KiB |
test_0003.txt | AC | 238 ms | 5124 KiB |
test_0004.txt | AC | 234 ms | 5348 KiB |
test_0005.txt | AC | 239 ms | 5260 KiB |
test_0006.txt | AC | 216 ms | 5200 KiB |
test_0007.txt | AC | 245 ms | 5340 KiB |
test_0008.txt | AC | 227 ms | 5252 KiB |
test_0009.txt | AC | 242 ms | 5220 KiB |
test_0010.txt | AC | 231 ms | 5252 KiB |
test_0011.txt | AC | 231 ms | 5332 KiB |
test_0012.txt | AC | 223 ms | 5160 KiB |
test_0013.txt | AC | 226 ms | 5220 KiB |
test_0014.txt | AC | 229 ms | 5324 KiB |
test_0015.txt | AC | 245 ms | 5120 KiB |
test_0016.txt | AC | 249 ms | 5312 KiB |
test_0017.txt | AC | 252 ms | 5180 KiB |
test_0018.txt | AC | 218 ms | 5288 KiB |
test_0019.txt | AC | 232 ms | 5316 KiB |
test_0020.txt | AC | 247 ms | 5148 KiB |
test_0021.txt | AC | 248 ms | 5164 KiB |
test_0022.txt | AC | 235 ms | 5140 KiB |
test_0023.txt | AC | 219 ms | 5324 KiB |
test_0024.txt | AC | 231 ms | 5356 KiB |
test_0025.txt | AC | 239 ms | 5336 KiB |
test_0026.txt | AC | 260 ms | 5236 KiB |
test_0027.txt | AC | 239 ms | 5100 KiB |
test_0028.txt | AC | 250 ms | 5136 KiB |
test_0029.txt | AC | 237 ms | 5096 KiB |
test_0030.txt | AC | 228 ms | 5248 KiB |
test_0031.txt | AC | 239 ms | 5256 KiB |
test_0032.txt | AC | 239 ms | 5248 KiB |
test_0033.txt | AC | 244 ms | 5384 KiB |
test_0034.txt | AC | 240 ms | 5208 KiB |
test_0035.txt | AC | 226 ms | 5204 KiB |
test_0036.txt | AC | 220 ms | 5204 KiB |
test_0037.txt | AC | 217 ms | 5176 KiB |
test_0038.txt | AC | 227 ms | 5240 KiB |
test_0039.txt | AC | 234 ms | 5216 KiB |
test_0040.txt | AC | 233 ms | 5328 KiB |
test_0041.txt | AC | 220 ms | 5316 KiB |
test_0042.txt | AC | 233 ms | 5204 KiB |
test_0043.txt | AC | 235 ms | 5304 KiB |
test_0044.txt | AC | 232 ms | 5232 KiB |
test_0045.txt | AC | 246 ms | 5116 KiB |
test_0046.txt | AC | 261 ms | 5244 KiB |
test_0047.txt | AC | 255 ms | 5300 KiB |
test_0048.txt | AC | 254 ms | 5208 KiB |
test_0049.txt | AC | 234 ms | 5388 KiB |
test_0050.txt | AC | 255 ms | 5124 KiB |
test_0051.txt | AC | 238 ms | 5208 KiB |
test_0052.txt | AC | 230 ms | 5344 KiB |
test_0053.txt | AC | 250 ms | 5232 KiB |
test_0054.txt | AC | 226 ms | 5192 KiB |
test_0055.txt | AC | 245 ms | 5236 KiB |
test_0056.txt | AC | 230 ms | 5108 KiB |
test_0057.txt | AC | 236 ms | 5208 KiB |
test_0058.txt | AC | 215 ms | 5228 KiB |
test_0059.txt | AC | 244 ms | 5368 KiB |
test_0060.txt | AC | 250 ms | 5248 KiB |
test_0061.txt | AC | 242 ms | 5216 KiB |
test_0062.txt | AC | 226 ms | 5096 KiB |
test_0063.txt | AC | 242 ms | 5296 KiB |
test_0064.txt | AC | 240 ms | 5244 KiB |
test_0065.txt | AC | 228 ms | 5228 KiB |
test_0066.txt | AC | 234 ms | 5208 KiB |
test_0067.txt | AC | 217 ms | 5232 KiB |
test_0068.txt | AC | 238 ms | 5288 KiB |
test_0069.txt | AC | 250 ms | 5288 KiB |
test_0070.txt | AC | 257 ms | 5212 KiB |
test_0071.txt | AC | 224 ms | 5156 KiB |
test_0072.txt | AC | 262 ms | 5140 KiB |
test_0073.txt | AC | 240 ms | 5124 KiB |
test_0074.txt | AC | 253 ms | 5232 KiB |
test_0075.txt | AC | 235 ms | 5188 KiB |
test_0076.txt | AC | 266 ms | 5200 KiB |
test_0077.txt | AC | 228 ms | 5208 KiB |
test_0078.txt | AC | 216 ms | 5204 KiB |
test_0079.txt | AC | 239 ms | 5224 KiB |
test_0080.txt | AC | 239 ms | 5156 KiB |
test_0081.txt | AC | 230 ms | 5348 KiB |
test_0082.txt | AC | 229 ms | 5208 KiB |
test_0083.txt | AC | 251 ms | 5212 KiB |
test_0084.txt | AC | 226 ms | 5224 KiB |
test_0085.txt | AC | 235 ms | 5348 KiB |
test_0086.txt | AC | 249 ms | 5148 KiB |
test_0087.txt | AC | 246 ms | 5224 KiB |
test_0088.txt | AC | 238 ms | 5128 KiB |
test_0089.txt | AC | 227 ms | 5148 KiB |
test_0090.txt | AC | 233 ms | 5212 KiB |
test_0091.txt | AC | 238 ms | 5216 KiB |
test_0092.txt | AC | 256 ms | 5384 KiB |
test_0093.txt | AC | 237 ms | 5148 KiB |
test_0094.txt | AC | 231 ms | 5360 KiB |
test_0095.txt | AC | 227 ms | 5236 KiB |
test_0096.txt | AC | 213 ms | 5212 KiB |
test_0097.txt | AC | 233 ms | 5212 KiB |
test_0098.txt | AC | 244 ms | 5196 KiB |
test_0099.txt | AC | 244 ms | 5212 KiB |