提出 #6215481
ソースコード 拡げる
"""
start -> x -> hokora -> x -> goal
各区間が、指定された対戦回数の中で最短経路
"""
import sys
input = sys.stdin.readline
import numpy as np
R,C,K = map(int,input().split())
S = 'T' * (C+2)
for _ in range(R):
S += 'T' + input().rstrip() + 'T'
S += 'T' * (C+2)
L = len(S)
INF = 10 ** 15
start = S.find('S')
goal = S.find('G')
hokora = S.find('C')
def dijkstra(start):
# 接触する敵、場所
dist = [[INF] * L for _ in range(K+1)]
q = [(0,start)]
d = 0
dist[0][start] = 0
move = (1,-1,C+2,-C-2)
while q:
d += 1
qq = []
for k,x in q:
for dx in move:
x1 = x+dx
k1 = k
c = S[x1]
if c == 'T':
continue
if c == 'E':
k1 += 1
if k1 > K:
continue
if dist[k1][x1] < INF:
continue
dist[k1][x1] = d
qq.append((k1,x1))
q = qq
return np.array(dist, dtype=np.int64)
d1 = dijkstra(start)
d2 = dijkstra(goal)
d3 = dijkstra(hokora)
# 共通の地点の補正
enemy = [i for i,c in enumerate(S) if c == 'E']
d2[:K,enemy] = d2[1:,enemy]
d2[K,enemy] = 0
d3[:K,enemy] = d3[1:,enemy]
d3[K,enemy] = 0
def merge(d1,d2):
d = np.full((2*K+1,L), INF, dtype=np.int64)
# d[n] = min(a+b = n) d1[a] + d2[b]
for a in range(K+1):
d[a:a+K+1] = np.minimum(d[a:a+K+1], d1[a] + d2)
return d[:K+1]
d = merge(d1,d2)
d = merge(d,2*d3)
answer = d.min()
if answer == INF:
answer = -1
print(answer)
提出情報
ジャッジ結果
| セット名 | All | ||
|---|---|---|---|
| 得点 / 配点 | 100 / 100 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| All | case_01.txt, case_02.txt, case_03.txt, case_04.txt, case_05.txt, case_06.txt, case_07.txt, case_08.txt, case_09.txt, case_10.txt, case_11.txt, case_12.txt, case_13.txt, case_14.txt, case_15.txt, case_16.txt, case_17.txt, case_18.txt, case_19.txt, case_20.txt, case_21.txt, case_22.txt, case_23.txt, case_24.txt, case_25.txt, case_26.txt, case_27.txt, case_28.txt, case_29.txt, case_30.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| case_01.txt | AC | 153 ms | 12432 KiB |
| case_02.txt | AC | 153 ms | 12432 KiB |
| case_03.txt | AC | 150 ms | 12432 KiB |
| case_04.txt | AC | 154 ms | 12432 KiB |
| case_05.txt | AC | 156 ms | 12432 KiB |
| case_06.txt | AC | 155 ms | 12432 KiB |
| case_07.txt | AC | 155 ms | 12432 KiB |
| case_08.txt | AC | 182 ms | 13976 KiB |
| case_09.txt | AC | 154 ms | 12672 KiB |
| case_10.txt | AC | 161 ms | 12800 KiB |
| case_11.txt | AC | 159 ms | 12928 KiB |
| case_12.txt | AC | 150 ms | 12432 KiB |
| case_13.txt | AC | 190 ms | 14524 KiB |
| case_14.txt | AC | 1022 ms | 33780 KiB |
| case_15.txt | AC | 854 ms | 33788 KiB |
| case_16.txt | AC | 229 ms | 16656 KiB |
| case_17.txt | AC | 1046 ms | 33832 KiB |
| case_18.txt | AC | 156 ms | 12544 KiB |
| case_19.txt | AC | 554 ms | 23324 KiB |
| case_20.txt | AC | 608 ms | 33784 KiB |
| case_21.txt | AC | 935 ms | 33784 KiB |
| case_22.txt | AC | 182 ms | 14520 KiB |
| case_23.txt | AC | 1002 ms | 33784 KiB |
| case_24.txt | AC | 240 ms | 16872 KiB |
| case_25.txt | AC | 741 ms | 29224 KiB |
| case_26.txt | AC | 294 ms | 18316 KiB |
| case_27.txt | AC | 626 ms | 33372 KiB |
| case_28.txt | AC | 686 ms | 32092 KiB |
| case_29.txt | AC | 156 ms | 12544 KiB |
| case_30.txt | AC | 188 ms | 13184 KiB |
| sample_01.txt | AC | 151 ms | 12432 KiB |
| sample_02.txt | AC | 149 ms | 12432 KiB |
| sample_03.txt | AC | 150 ms | 12432 KiB |
| sample_04.txt | AC | 156 ms | 12432 KiB |