考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC094-B - Toll Gates を解く

ABC094-B - Toll Gates

 

初期位置から目的地までにいくつかの料金所を経由する

そのコストの最小値を求める問題

 

初期位置から目的地に向かって

1ずつ動かしていった場合をシミュレーションして解く

 

目的地は2つあるので、どちらの場合もシミュレーションしてみて

コストが小さい方を出力する

 

以上を踏まえて書いたコードを以下に示す

 

提出したコード

# 入力
N,M,X=map(int,input().split())
l=list(map(int,input().split()))

# 現在位置
_X=X

# コスト
c1=c2=0

# 目的地に向かって1ずつ動かす(X->N)
for i in range(N-X):
  # 移動
  _X+=1

  # 料金所があればコストを加算
  if l.count(_X)>0:
    c1+=1

# 現在位置をリセット
_X=X

# 目的地に向かって1ずつ動かす(X->0)
for i in range(X-0):
  # 移動
  _X-=1

  # 料金所があればコストを加算
  if l.count(_X)>0:
    c2+=1

# コストが小さい方を出力
print(min(c1,c2))

 

1パターン目のシミュレーションで使った現在位置を示す変数を

そのまま2パターン目のシミュレーションで使いまわすと

正しい値が得られなくなってしまうので注意

 

そのため上記では一度、現在位置を示す変数の値をリセットしている

 

# 現在位置
_X=X

 

提出結果はACでした