考えて競プロする

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

ABC025-B - 双子とスイカ割り を解く

ABC025-B - 双子とスイカ割り

 

ちょっと問題文を理解するのが難しい…

以下の部分が重要っぽい

 

・di<A のとき、直大くんは向いている方向に A メートル進む。

・A≦di≦B のとき、直大くんは向いている方向に di メートル進む。

・di>B のとき、直大くんは向いている方向に B メートル進む。

 

この3条件を満たしつつ移動をした後

どの地点に位置するかを答える問題のようだ

 

制約も小さいので、シミュレーションするコードを書けば良さそうだ

方向は 'East'・'West' で与えられるので

とりあえず 'East' を + 方向、'West' を - 方向 と置くことにしよう

 

提出したコード

# 入力
N,A,B=map(int,input().split())

# 初期位置
x=0

for i in range(N):
  s,d=map(str,input().split())
  d=int(d)
  
  # di<A のとき、直大くんは向いている方向に A メートル進む。
  if d<A:
    if s=='East':
      x+=A
    else:
      x-=A
  # A≦di≦B のとき、直大くんは向いている方向に di メートル進む。
  elif A<=d and d<=B:
    if s=='East':
      x+=d
    else:
      x-=d
  # di>B のとき、直大くんは向いている方向に B メートル進む。
  else:
    if s=='East':
      x+=B
    else:
      x-=B

# 出力
if x<0:
  print('West',-x)
elif x==0:
  print(0)
else:
  print('East',x)
 

入力が "文字列" "数字" の形式なので

一度 str型 で入力を受け取った後に数字の方を int でキャストしている

 

出力時は、計算結果の符号を見て

方向を決定すればいい(負なら 'West' 、正なら 'East' )

 

提出結果はACでした