ログインしてください。
提出 #22850265
ソースコード 拡げる
# local test max score: 916839889
from heapq import heappush, heappop
inf=10**18
move = {"U":(-1,0), "R":(0,1), "D":(1,0), "L":(0,-1)}
def dijkstra(d,p,sy,sx):
hq = [(0, (sy,sx))] # (distance, node)
seen = [[False]*W for _ in range(H)]
while hq:
y,x = heappop(hq)[1]
seen[y][x] = True
for key in move:
new_y, new_x = y+move[key][0], x+move[key][1]
if not (0 <= new_y <= H-1 and 0 <= new_x <= W-1):
continue
cost = graph[new_y][new_x][key][1]
if seen[new_y][new_x] == False and d[y][x] + cost < d[new_y][new_x]:
d[new_y][new_x] = d[y][x] + cost
heappush(hq, (d[new_y][new_x], (new_y, new_x)))
p[new_y][new_x] = [y,x]
def reverse_dir(dir):
if dir == "U":
dir = "D"
elif dir == "D":
dir = "U"
elif dir == "L":
dir = "R"
elif dir == "R":
dir = "L"
return dir
def get_path(ty,tx):
path = []
total_cost = 0
t = [ty,tx]
while t != [-1,-1]:
s = prev[t[0]][t[1]]
y = t[0]-s[0]
x = t[1]-s[1]
tmp = [k for k, v in move.items() if v == (y,x)]
if tmp:
path.append(tmp[0])
graph[t[0]][t[1]][tmp[0]][0] += 1
graph[y][x][reverse_dir(tmp[0])][0] += 1
total_cost += graph[t[0]][t[1]][tmp[0]][1]
t = s
path.reverse()
return [path, total_cost]
def update_graph_weight_ini(actual_cost,path,ty,tx):
t = [ty,tx]
for p in path[::-1]:
y = t[0] - move[p][0]
x = t[1] - move[p][1]
graph[t[0]][t[1]][p][1] = graph[y][x][reverse_dir(p)][1] = actual_cost//len(path)
# count = graph[t[0]][t[1]][p][0]
# old_cost = graph[t[0]][t[1]][p][1]
# graph[t[0]][t[1]][p][1] = (old_cost*count + actual_cost//len(path))//(count+1)
# count = graph[y][x][reverse_dir(p)][0]
# old_cost = graph[y][x][reverse_dir(p)][1]
# graph[y][x][reverse_dir(p)][1] = (old_cost*count + actual_cost//len(path))//(count+1)
t = [y,x]
def update_graph_weight_last(actual_cost,tmp_total_cost,path,ty,tx):
t = [ty,tx]
for p in path[::-1]:
y = t[0] - move[p][0]
x = t[1] - move[p][1]
weighted_cost = actual_cost * graph[t[0]][t[1]][p][1]//tmp_total_cost
graph[t[0]][t[1]][p][1] = graph[y][x][reverse_dir(p)][1] = (graph[t[0]][t[1]][p][1] + weighted_cost)//2
t = [y,x]
H = W = 30
# {direction:[count, cost]}
graph = [[{"U":[1,1], "R":[1,1], "D":[1,1], "L":[1,1]} for _ in range(W)] for _ in range(H)]
for i in range(1000):
# input position of start and goal
sy,sx,ty,tx = map(int,input().split())
# calculate minimum path with dijkstra
dist = [[inf]*W for _ in range(H)]
dist[sy][sx] = 0
prev =[[[-1,-1]]*W for _ in range(H)]
dijkstra(dist,prev,sy,sx)
l, tmp_total_cost = get_path(ty,tx)
path = "".join(l)
print(path, flush=True)
# update weights of the graph based on the given cost and the used path
# change the paramter tuning process for the first quarter and after that.
actual_cost = int(input())
if i < 250:
update_graph_weight_ini(actual_cost,path,ty,tx)
else:
update_graph_weight_last(actual_cost,tmp_total_cost,path,ty,tx)
提出情報
| 提出日時 | |
|---|---|
| 問題 | A - Shortest Path Queries |
| ユーザ | otsuneko |
| 言語 | PyPy3 (7.3.0) |
| 得点 | 89446267313 |
| コード長 | 3402 Byte |
| 結果 | AC |
| 実行時間 | 1307 ms |
| メモリ | 92628 KiB |
ジャッジ結果
| セット名 | test_ALL | ||
|---|---|---|---|
| 得点 / 配点 | 89446267313 / 100000000000 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| 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 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| test_0000.txt | AC | 1144 ms | 89552 KiB |
| test_0001.txt | AC | 1183 ms | 89432 KiB |
| test_0002.txt | AC | 1194 ms | 91404 KiB |
| test_0003.txt | AC | 1178 ms | 90056 KiB |
| test_0004.txt | AC | 1216 ms | 89024 KiB |
| test_0005.txt | AC | 1173 ms | 91560 KiB |
| test_0006.txt | AC | 1235 ms | 89632 KiB |
| test_0007.txt | AC | 1209 ms | 89312 KiB |
| test_0008.txt | AC | 1190 ms | 91076 KiB |
| test_0009.txt | AC | 1193 ms | 89292 KiB |
| test_0010.txt | AC | 1167 ms | 90352 KiB |
| test_0011.txt | AC | 1207 ms | 90432 KiB |
| test_0012.txt | AC | 1190 ms | 88184 KiB |
| test_0013.txt | AC | 1204 ms | 89272 KiB |
| test_0014.txt | AC | 1224 ms | 89316 KiB |
| test_0015.txt | AC | 1194 ms | 90800 KiB |
| test_0016.txt | AC | 1246 ms | 92224 KiB |
| test_0017.txt | AC | 1206 ms | 88668 KiB |
| test_0018.txt | AC | 1171 ms | 90732 KiB |
| test_0019.txt | AC | 1231 ms | 90120 KiB |
| test_0020.txt | AC | 1229 ms | 91292 KiB |
| test_0021.txt | AC | 1184 ms | 92212 KiB |
| test_0022.txt | AC | 1204 ms | 89224 KiB |
| test_0023.txt | AC | 1184 ms | 88944 KiB |
| test_0024.txt | AC | 1194 ms | 89136 KiB |
| test_0025.txt | AC | 1243 ms | 91364 KiB |
| test_0026.txt | AC | 1173 ms | 90216 KiB |
| test_0027.txt | AC | 1172 ms | 90320 KiB |
| test_0028.txt | AC | 1161 ms | 88164 KiB |
| test_0029.txt | AC | 1247 ms | 89404 KiB |
| test_0030.txt | AC | 1173 ms | 90832 KiB |
| test_0031.txt | AC | 1196 ms | 90840 KiB |
| test_0032.txt | AC | 1240 ms | 92628 KiB |
| test_0033.txt | AC | 1227 ms | 88508 KiB |
| test_0034.txt | AC | 1238 ms | 89688 KiB |
| test_0035.txt | AC | 1223 ms | 90604 KiB |
| test_0036.txt | AC | 1177 ms | 88864 KiB |
| test_0037.txt | AC | 1213 ms | 89436 KiB |
| test_0038.txt | AC | 1167 ms | 90104 KiB |
| test_0039.txt | AC | 1220 ms | 90168 KiB |
| test_0040.txt | AC | 1197 ms | 91172 KiB |
| test_0041.txt | AC | 1226 ms | 91052 KiB |
| test_0042.txt | AC | 1198 ms | 91136 KiB |
| test_0043.txt | AC | 1197 ms | 89976 KiB |
| test_0044.txt | AC | 1231 ms | 90192 KiB |
| test_0045.txt | AC | 1181 ms | 90736 KiB |
| test_0046.txt | AC | 1200 ms | 90872 KiB |
| test_0047.txt | AC | 1207 ms | 89760 KiB |
| test_0048.txt | AC | 1264 ms | 90808 KiB |
| test_0049.txt | AC | 1181 ms | 88960 KiB |
| test_0050.txt | AC | 1191 ms | 87408 KiB |
| test_0051.txt | AC | 1152 ms | 89404 KiB |
| test_0052.txt | AC | 1307 ms | 92416 KiB |
| test_0053.txt | AC | 1213 ms | 89832 KiB |
| test_0054.txt | AC | 1271 ms | 90868 KiB |
| test_0055.txt | AC | 1214 ms | 90872 KiB |
| test_0056.txt | AC | 1205 ms | 89684 KiB |
| test_0057.txt | AC | 1198 ms | 91260 KiB |
| test_0058.txt | AC | 1187 ms | 88628 KiB |
| test_0059.txt | AC | 1175 ms | 90032 KiB |
| test_0060.txt | AC | 1233 ms | 89880 KiB |
| test_0061.txt | AC | 1189 ms | 89472 KiB |
| test_0062.txt | AC | 1195 ms | 88780 KiB |
| test_0063.txt | AC | 1202 ms | 90432 KiB |
| test_0064.txt | AC | 1179 ms | 90088 KiB |
| test_0065.txt | AC | 1220 ms | 89492 KiB |
| test_0066.txt | AC | 1263 ms | 91508 KiB |
| test_0067.txt | AC | 1194 ms | 87856 KiB |
| test_0068.txt | AC | 1205 ms | 90492 KiB |
| test_0069.txt | AC | 1180 ms | 91176 KiB |
| test_0070.txt | AC | 1199 ms | 90684 KiB |
| test_0071.txt | AC | 1218 ms | 89948 KiB |
| test_0072.txt | AC | 1172 ms | 87876 KiB |
| test_0073.txt | AC | 1208 ms | 90176 KiB |
| test_0074.txt | AC | 1253 ms | 90676 KiB |
| test_0075.txt | AC | 1166 ms | 89700 KiB |
| test_0076.txt | AC | 1192 ms | 90664 KiB |
| test_0077.txt | AC | 1177 ms | 90512 KiB |
| test_0078.txt | AC | 1187 ms | 90488 KiB |
| test_0079.txt | AC | 1159 ms | 90056 KiB |
| test_0080.txt | AC | 1213 ms | 89880 KiB |
| test_0081.txt | AC | 1184 ms | 91060 KiB |
| test_0082.txt | AC | 1205 ms | 88772 KiB |
| test_0083.txt | AC | 1241 ms | 90188 KiB |
| test_0084.txt | AC | 1189 ms | 91432 KiB |
| test_0085.txt | AC | 1162 ms | 90240 KiB |
| test_0086.txt | AC | 1174 ms | 88644 KiB |
| test_0087.txt | AC | 1215 ms | 90168 KiB |
| test_0088.txt | AC | 1182 ms | 89208 KiB |
| test_0089.txt | AC | 1219 ms | 92152 KiB |
| test_0090.txt | AC | 1206 ms | 89372 KiB |
| test_0091.txt | AC | 1160 ms | 89748 KiB |
| test_0092.txt | AC | 1201 ms | 88936 KiB |
| test_0093.txt | AC | 1145 ms | 90596 KiB |
| test_0094.txt | AC | 1228 ms | 89996 KiB |
| test_0095.txt | AC | 1221 ms | 89640 KiB |
| test_0096.txt | AC | 1202 ms | 89832 KiB |
| test_0097.txt | AC | 1254 ms | 91876 KiB |
| test_0098.txt | AC | 1239 ms | 89960 KiB |
| test_0099.txt | AC | 1212 ms | 91072 KiB |