提出 #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)

提出情報

提出日時
問題 C - 最後の森
ユーザ maspy
言語 Python (3.4.3)
得点 100
コード長 1531 Byte
結果 AC
実行時間 1046 ms
メモリ 33832 KiB

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 34
セット名 テストケース
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