提出 #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
結果
AC × 100
セット名 テストケース
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